## Class FenetreGraphique

- java.lang.Object
- - FenetreGraphique

-     public class FenetreGraphique
      extends java.lang.Object

  Affichage graphique haute résolution en Java.
  Les fonctionnalités fournies sont les suivantes:
  - Ouverture d'une fenêtre de dessin
  - Changement de la taille de la fenêtre de dessin
  - Activation/désactivation du changement de la taille de la fenêtre de dessin par l'utilisateur
  - Choix de la couleur de tracé
  - Tracé d'un pixel selon la couleur de tracé
  - Tracé d'un segment de droite selon la couleur de tracé
  - Tracé d'un rectangle selon la couleur de tracé
  - Remplissage d'un rectangle selon la couleur de tracé
  - Tracé d'un cercle selon la couleur de tracé
  - Remplissage d'un cercle selon la couleur de tracé
  - Tracé d'une chaine de caractères selon la couleur de tracé
  - Tracé d'une image
  - Activation/désactivation du mode de tracé "ou exclusif"
  - Activation/désactivation du mode de tracé "alpha blending" (transparence)
  - Choix de la couleur d'effacement de la zone de tracé
  - Effacement de la zone de tracé avec la couleur d'effacement
  - Chargement local et téléchargement internet d'une image au format png
  - Temporisation d'exécution pendant une période de temps comptée en milli-secondes
  - Récuperation des touches de clavier frappées
  - Récuperation des boutons de souris utilisés
  - Récuperation des positions en x et en y de la souris
  Apres ouverture d'une fenêtre de dessin, la création d'une image suit le schéma suivant:
  - Effacement de la zone de tracé au moyen de la méthode clear()
  - Exécution de tous les appels de fonction correspondant aux élements graphiques à tracer
  - Appel a la méthode flush() pour afficher l'image obtenue après construction
  La construction d'une animation nécessite de boucler sur les trois étapes précédentes
  Attention, il n'est pas nécessaire d'appeler la méthode flush chaque fois qu'un tracé est réalisé, mais seulement quand l'image est intégralement construite.
  Les coordonnées utilisées sont entières et comptées en pixels.
  Le repère d'affichage est orienté avec l'axe des x en direction de la droite et l'axe des y en direction du bas de la fenêtre d'affichage.
  L'origine (0,0) est située en haut à gauche de la fenêtre.
  Une fenêtre reste ouverte jusqu'à ce que la méthode close() soit executée qui entraîne sa fermeture et sa destruction.
  Tant qu'au moins une fenêtre graphique reste ouverte, même si la méthode main est terminée, l'application reste en fonctionnement.
  L'utilisation de la méthode statique exit() permet, à tout instant, de fermer toutes les fenêtres ouvertes et d'interrompre l'application.
  Version:
    1.0, 01/04/18
  Author:
    Nicolas JANEY, nicolas.janey@univ-fcomte.fr

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static int` | `COLABA8x13` Police de caracteres "Colaba".
    `static int` | `SYMBOL8x13` Police de caracteres "Symbol".

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `clear()` Effacement de l'image.
    `void` | `close()` Fermeture de la fenêtre graphique.
    `int[][]` | `downloadPNGFile(java.lang.String url)` Téléchargement réseau d'une image au format PNG.
    `void` | `drawCircle(int cx, int cy, int r)` Affichage d'un cercle
    `void` | `drawImage(int px, int py, int[][] img)` Affichage d'un rectangle de pixels dans la fenetre d'affichage.
    `void` | `drawLine(int xi, int yi, int xf, int yf)` Affichage d'un segment de droite.
    `void` | `drawPixel(int x, int y)` Affichage d'un pixel.
    `void` | `drawRect(int xi, int yi, int tx, int ty)` Affichage d'un rectangle.
    `void` | `drawString(int x, int y, int police, java.lang.String s)` Affichage d'une chaine de caractéres composée uniquement de caractères non accentués.
    `void` | `drawText(int x, int y, int police, java.lang.Object... s)` Affichage d'un texte composé uniquement de caractères non accentués.
    `void` | `drawText(int x, int y, int police, java.lang.String format, java.lang.Object... s)` Affichage d'un texte composé uniquement de caractères non accentués.
    `static void` | `exit()` Interruption du fonctionnement de l'application et fermeture de toutes les fenetres graphiques ouvertes.
    `void` | `fillCircle(int cx, int cy, int r)` Remplissage d'un cercle
    `void` | `fillRect(int xi, int yi, int tx, int ty)` Remplissage d'un rectangle.
    `void` | `flush()` Affichage de l'image dans la fenêtre.
    `int` | `getBufferHeight()` Retour de la résolution en y de la surface d'affichage.
    `int` | `getBufferWidth()` Retour de la résolution en x de la surface d'affichage.
    `char` | `getKey()` Retour du dernier caractère tapé au clavier (caractère de code ASCII 0 si pas de caractère saisi au clavier).
    `int` | `getMouseButton()` Retour du dernier bouton utilisé de la souris (-1 pour pas de bouton utilisé, 1 pour bouton gauche, 2 pour bouton central, 3 pour bouton droit).
    `int` | `getMouseState()` Retour de l'état actuel de la souris (0 pour bouton non pressé, 1 pour bouton pressé, 2 pour clic realisé).
    `int` | `getMouseX()` Retour de la position en x de la souris au sein de la fenetre (-1 si en dehors).
    `int` | `getMouseY()` Retour de la position en y de la souris au sein de la fenetre (-1 si en dehors).
    `int` | `getSpecialKey()` Retour du code de la dernière touche "speciale" (touche de curseur, touches de fonction, ...) tapée au clavier (0 si pas de touche frappee).
    `int[][]` | `loadPNGFile(java.lang.String filename)` Chargement d'une image au format PNG.
    `boolean` | `notClosed()` Test si la fenêtre n'a pas été fermée.
    `void` | `setAlpha(double a)` Définition de la valeur alpha (transparence).
    `void` | `setAlphaBlendingMode(boolean state)` Activation/désactivation du mode d'affichage "alpha blendind" (transparence).
    `void` | `setClearColor(int r, int v, int b)` Choix de la couleur d'effacement de la fenêtre de dessin (noir par défaut).
    `void` | `setColor(int r, int v, int b)` Définition de la couleur de tracé (blanc par defaut).
    `void` | `setWindowResizable(boolean bool)` Activation/désactivation de la possibilité de changer interactivement la taille de la fenêtre par l'utilisateur.
    `void` | `setWindowSize(int tx, int ty)` Changement de la taille de la fenêtre d'affichage.
    `void` | `setXorMode(boolean state)` Activation/désactivation du mode d'affichage xor (ou exclusif).
    `static void` | `wait(int ms)` Temporisation.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### SYMBOL8x13

          public static final int SYMBOL8x13

      Police de caracteres "Symbol".
      See Also:
        Constant Field Values

    - #### COLABA8x13

          public static final int COLABA8x13

      Police de caracteres "Colaba".
      See Also:
        Constant Field Values

  - ### Method Detail

    - #### setColor

          public void setColor(int r,
                               int v,
                               int b)

      Définition de la couleur de tracé (blanc par defaut).
      Parameters:
        `r` - La composante de rouge de la couleur de tracé (int dans [0,255]).
        `v` - La composante de vert de la couleur de tracé (int dans [0,255]).
        `b` - La composante de bleu de la couleur de tracé (int dans [0,255]).

    - #### setAlpha

          public void setAlpha(double a)

      Définition de la valeur alpha (transparence).
      Parameters:
        `a` - La composante alpha ([0.0,1.0] pour [transparent,opaque]).

    - #### drawPixel

          public void drawPixel(int x,
                                int y)

      Affichage d'un pixel.
      Parameters:
        `x` - L'abscisse du pixel.
        `y` - L'ordonnee du pixel.

    - #### drawLine

          public void drawLine(int xi,
                               int yi,
                               int xf,
                               int yf)

      Affichage d'un segment de droite.
      Parameters:
        `xi` - L'abscisse du pixel initial.
        `yi` - L'ordonnee du pixel initial.
        `xf` - L'abscisse du pixel final.
        `yf` - L'ordonnee du pixel final.

    - #### drawRect

          public void drawRect(int xi,
                               int yi,
                               int tx,
                               int ty)

      Affichage d'un rectangle.
      Parameters:
        `xi` - La coordonnée x du coin supérieur gauche.
        `yi` - La coordonnée y du coin supérieur gauche.
        `tx` - La longueur en x du rectangle.
        `ty` - La longueur en y du rectangle.

    - #### fillRect

          public void fillRect(int xi,
                               int yi,
                               int tx,
                               int ty)

      Remplissage d'un rectangle.
      Parameters:
        `xi` - La coordonnée x du coin supérieur gauche.
        `yi` - La coordonnée y du coin supérieur gauche.
        `tx` - La longueur en x du rectangle.
        `ty` - La longueur en y du rectangle.

    - #### fillCircle

          public void fillCircle(int cx,
                                 int cy,
                                 int r)

      Remplissage d'un cercle
      Parameters:
        `cx` - L'abscisse du centre du cercle.
        `cy` - L'ordonnee du centre du cercle.
        `r` - Le rayon du cercle.

    - #### drawCircle

          public void drawCircle(int cx,
                                 int cy,
                                 int r)

      Affichage d'un cercle
      Parameters:
        `cx` - L'abscisse du centre du cercle.
        `cy` - L'ordonnee du centre du cercle.
        `r` - Le rayon du cercle.

    - #### setClearColor

          public void setClearColor(int r,
                                    int v,
                                    int b)

      Choix de la couleur d'effacement de la fenêtre de dessin (noir par défaut).
      Parameters:
        `r` - La composante de rouge de la couleur d'effacement (int dans [0,255]).
        `v` - La composante de vert de la couleur d'effacement (int dans [0,255]).
        `b` - La composante de bleu de la couleur d'effacement (int dans [0,255]).

    - #### drawString

          public void drawString(int x,
                                 int y,
                                 int police,
                                 java.lang.String s)

      Affichage d'une chaine de caractéres composée uniquement de caractères non accentués.
      Parameters:
        `x` - L'abscisse d'affichage.
        `y` - L'ordonnée d'affichage.
        `police` - La police de caractéres d'affichage (FenetreGraphique.SYMBOL8x13 ou FenetreGraphique.COLABA8x13).
        `s` - La chaine de caractères à afficher.

    - #### drawText

          public void drawText(int x,
                               int y,
                               int police,
                               java.lang.Object... s)

      Affichage d'un texte composé uniquement de caractères non accentués.
      Parameters:
        `x` - L'abscisse d'affichage.
        `y` - L'ordonnée d'affichage.
        `police` - La police de caractères d'affichage (FenetreGraphique.SYMBOL8x13 ou FenetreGraphique.COLABA8x13).
        `s` - La liste des paramètres à afficher.

    - #### drawText

          public void drawText(int x,
                               int y,
                               int police,
                               java.lang.String format,
                               java.lang.Object... s)

      Affichage d'un texte composé uniquement de caractères non accentués.
      Parameters:
        `x` - L'abscisse d'affichage.
        `y` - L'ordonnée d'affichage.
        `police` - La police de caractères d'affichage (FenetreGraphique.SYMBOL8x13 ou FenetreGraphique.COLABA8x13).
        `format` - Le format d'affichage texte.
        `s` - La liste des paramètres à afficher.

    - #### drawImage

          public void drawImage(int px,
                                int py,
                                int[][] img)

      Affichage d'un rectangle de pixels dans la fenetre d'affichage.
      Le tableau passé en parametre décrit l'image à afficher.
      Il s'agit d'un tableau à deux indices.
      La taille selon le premier indice est la résolution en x de l'image.
      La taille selon le second indice est la résolution en y de l'image.
      Chaque entier contenu dans le tableau décrit un pixel de l'image codé en 24 bits au moyen d'une valeur comprise entre 0 et (2^24)-1=16777215.
      Les 8 bits de poids faible codent la composante rouge.
      Les 8 bits de poids intermediaire codent la composante verte.
      Les 8 bits de poids fort codent la composante bleue.
      L'alpha blending et le mode xor ne sont pas gérés.
      Parameters:
        `px` - La position en x du pixel supérieur gauche de l'image dessinée.
        `py` - La position en y du pixel supérieur gauche de l'image dessinée.
        `img` - Le tableau de int décrivant l'image.

    - #### clear

          public void clear()

      Effacement de l'image.

    - #### flush

          public void flush()

      Affichage de l'image dans la fenêtre.

    - #### close

          public void close()

      Fermeture de la fenêtre graphique.

    - #### notClosed

          public boolean notClosed()

      Test si la fenêtre n'a pas été fermée.
      Returns:
        Le booléen false si la fenêtre a été fermée, true sinon.

    - #### exit

          public static void exit()

      Interruption du fonctionnement de l'application et fermeture de toutes les fenetres graphiques ouvertes. Perte des informations non sauvegardees.

    - #### getKey

          public char getKey()

      Retour du dernier caractère tapé au clavier (caractère de code ASCII 0 si pas de caractère saisi au clavier).
      Returns:
        Le caractère lu.

    - #### getSpecialKey

          public int getSpecialKey()

      Retour du code de la dernière touche "speciale" (touche de curseur, touches de fonction, ...) tapée au clavier (0 si pas de touche frappee).
      Returns:
        Le code de la touche frappée.

    - #### getMouseState

          public int getMouseState()

      Retour de l'état actuel de la souris (0 pour bouton non pressé, 1 pour bouton pressé, 2 pour clic realisé).
      Returns:
        L'état de la souris.

    - #### getMouseButton

          public int getMouseButton()

      Retour du dernier bouton utilisé de la souris (-1 pour pas de bouton utilisé, 1 pour bouton gauche, 2 pour bouton central, 3 pour bouton droit).
      Returns:
        Le bouton utilisé.

    - #### getMouseX

          public int getMouseX()

      Retour de la position en x de la souris au sein de la fenetre (-1 si en dehors).
      Returns:
        La position en x de la souris.

    - #### getMouseY

          public int getMouseY()

      Retour de la position en y de la souris au sein de la fenetre (-1 si en dehors).
      Returns:
        La position en y de la souris.

    - #### setXorMode

          public void setXorMode(boolean state)

      Activation/désactivation du mode d'affichage xor (ou exclusif).
      Si activation du mode xor, désactivation automatique du mode alpha blending.
      Parameters:
        `state` - La valeur d'activation/désactivation.

    - #### setAlphaBlendingMode

          public void setAlphaBlendingMode(boolean state)

      Activation/désactivation du mode d'affichage "alpha blendind" (transparence).
      Si activation du mode alphaBlending, désactivation automatique du mode xor.
      Parameters:
        `state` - La valeur d'activation/désactivation.

    - #### getBufferWidth

          public int getBufferWidth()

      Retour de la résolution en x de la surface d'affichage.
      Returns:
        La résolution en x de la surface d'affichage.

    - #### getBufferHeight

          public int getBufferHeight()

      Retour de la résolution en y de la surface d'affichage.
      Returns:
        La résolution en y de la surface d'affichage.

    - #### wait

          public static void wait(int ms)

      Temporisation.
      Parameters:
        `ms` - Le nombre de millisecondes de temporisation.

    - #### loadPNGFile

          public int[][] loadPNGFile(java.lang.String filename)

      Chargement d'une image au format PNG.
      Parameters:
        `filename` - Le nom du fichier PNG à chager.
      Returns:
        La matrice de pixels lue, null si la lecture échoue.

    - #### downloadPNGFile

          public int[][] downloadPNGFile(java.lang.String url)

      Téléchargement réseau d'une image au format PNG.
      Parameters:
        `url` - L'adresse internet (url) sur laquelle effectuer le téléchargement.
      Returns:
        La matrice de pixels lue, null si la lecture échoue.

    - #### setWindowSize

          public void setWindowSize(int tx,
                                    int ty)

      Changement de la taille de la fenêtre d'affichage.
      Parameters:
        `tx` - La nouvelle taille en x.
        `ty` - La nouvelle taille en y.

    - #### setWindowResizable

          public void setWindowResizable(boolean bool)

      Activation/désactivation de la possibilité de changer interactivement la taille de la fenêtre par l'utilisateur.
      Parameters:
        `bool` - Le booleen indiquant si la fenêtre est ajustable ou non.