Programmation Java Swing/Types de données et constantes

Un livre de Wikilivres.
Aller à la navigation Aller à la recherche


Les interfaces graphiques en Swing utilisent les mêmes types de données qu'en AWT. Ces types sont utilisés abondamment dans l'API pour définir des informations graphiques :

  • Couleur
  • Dimensions
  • Police de caractères
  • Position
  • Orientation

Couleurs[modifier | modifier le wikicode]

Un objet de classe java.awt.Color représente une couleur au format RVBA (Rouge, Vert, Bleu et Alpha) à quatre composantes dont la valeur est entre 0 et 255. La composante alpha définit l'opacité de la couleur : 0 = transparente, 255 = opaque (valeur par défaut).

Le constructeur de la classe java.awt.Color permet de spécifier la couleur avec les trois composantes et éventuellement la valeur alpha pour la transparence, de type int entre 0 et 255 ou de type float entre 0.0 et 1.0.

Exemples :

public static final Color
	C_BLEU_GRIS = new Color(150,150,180), // alpha=255 pour 100% d'opacité par défaut
	C_BLEU_VERT = new Color(0,170,220, 192); // alpha=192 pour 75% d'opacité

La classe java.awt.Color définit quelques couleurs utilisées fréquemment :

BLUE(0,0,255) GREEN(0,255,0) RED(255,0,0) ORANGE(255,200,0)
YELLOW(255,255,0) MAGENTA(255,0,255) CYAN(0,255,255) PINK(255,175,175)
BLACK(0,0,0) DARK_GRAY(64,64,64) GRAY(128,128,128) LIGHT_GRAY(192,192,192) WHITE(255,255,255)

Police de caractères[modifier | modifier le wikicode]

Un objet de classe java.awt.Font représente la police de caractère utilisée pour dessiner le texte. La classe possède deux constructeurs :

Font(String name, int style, int size)
Les attributs sont définis par les arguments suivants :
  • name : Nom de la police de caractères. Il peut aussi s'agir d'un nom symbolique défini par Java disponible sur toutes les plateformes : Dialog, DialogInput, Monospaced, ...
  • style : Style de police, parmi les constantes définies par la classe : PLAIN, BOLD, ITALIC, BOLD_ITALIC.
  • size : Taille de la police de caractères en points.
Font(Map<? extends Attributes, ?> attributes)
Les attributs sont définis par un dictionnaire (Map) dont les clés doivent être celles définies par la classe java.awt.font.TextAttribute. Ce constructeur permet de définir davantage d'attributs.
Logo La taille des polices de caractères en Java est en points pour 72 DPI (Dot Per Inch), quel que soit le DPI du système.

S'il est configuré convenablement au niveau système, le nombre de pixels par pouce (DPI) permet d'avoir un affichage de taille physique constant quel que soit le moyen d'affichage utilisé. Sachant qu'un point (pt) vaut 1/72 pouce (1/72 in), une police de caractère de 16pt devrait donc être affichée sur une hauteur de 21.333 pixels environ sur un écran à 96 DPI[1] :

Cependant, Java utilise 72 DPI, ce qui signifie que la taille donnée en point sera la même en pixels : 16pt affiché sur 16 pixels. Les polices de caractères apparaissent donc plus petites dans les applications Java par rapport aux autres applications (traitement de texte, logiciel de dessin, navigateur...) sur les écrans ayant un DPI supérieur et plus grandes sur les écrans avec un DPI inférieur à 72.

Pour obtenir un affichage identique aux autres applications, en ajoutant un paramètre dans l'application pour configurer le nombre de points par pouce, il faut ajuster la taille de la police. Pour l'exemple d'une police de caractères de 16 points sur un écran de 96 DPI, il faut utiliser une taille de 21,333. Cependant, le constructeur acceptant un nombre à virgule flottante pour la taille au lieu d'un entier est privé, mais la méthode deriveFont autorise un nombre à virgule flottante pour la taille.

int dpi = 96;
static final int dpi_java = 72;
// La taille initiale (entier) passée au constructeur n'a pas d'importance.
Font f_16_points = new Font("Arial", Font.PLAIN, 16).deriveFont(16f*dpi/dpi_java);

Cependant, au lieu d'utiliser une valeur fixe, il est préférable d'utiliser la valeur retournée par la méthode getScreenResolution() de la classe java.awt.Toolkit :

int dpi = java.awt.Toolkit.getDefaultToolkit().getScreenResolution();
static final int dpi_java = 72;
Font f_16_points = new Font("Arial", Font.PLAIN, 16).deriveFont(16f*dpi/dpi_java);

Le nombre de points par pouce n'est toutefois pas toujours bien configuré. La solution est de prévoir un paramètre de configuration pour changer la valeur de densité, en utilisant la valeur retournée par la méthode getScreenResolution() comme valeur par défaut.

Dimensions[modifier | modifier le wikicode]

Un objet de classe java.awt.Dimension définit la taille d'un composant avec deux attributs publics, qui peuvent être initialisés en passant leur valeur en argument du constructeur :

int width
Largeur en pixels (0 par défaut).
int height
Hauteur en pixels (0 par défaut).

Position[modifier | modifier le wikicode]

Un objet de classe java.awt.Point définit la position d'un composant avec deux attributs publics, qui peuvent être initialisés en passant leur valeur en argument du constructeur :

int x
Position horizontale en pixels (0 par défaut), relative au bord gauche du conteneur.
int y
Position vertical en pixels (0 par défaut), relative au bord supérieur du conteneur.

Constantes de position et orientation[modifier | modifier le wikicode]

L'interface javax.swing.SwingConstants est une collection de constantes relatives à la position et l'orientation. Les tableaux ci-dessous montrent leur valeur et ce qu'elle représente.

Le centre a la valeur nulle, et les autres constantes de positionnement sont distribuées ensuite dans le sens trigonométrique (anti-horaire) en partant du haut.

TOP = 1
LEFT = 2 CENTER = 0 RIGHT = 4
BOTTOM = 3

Le centre a la valeur nulle, et les autres constantes de direction sont distribuées ensuite dans le sens horaire (anti-trigonométrique) en partant du haut.

NORTH_WEST = 8 NORTH = 1 NORTH_EAST = 2
WEST = 7 CENTER = 0 EAST = 3
SOUTH_WEST = 6 SOUTH = 5 SOUTH_EAST = 4

Les autres constantes définies sont les constantes d'orientation :

  • HORIZONTAL = 0
  • VERTICAL = 1

les constantes de position selon l'orientation de lecture de la langue courante :

  • LEADING = 10 avant dans le sens de lecture.
Cela correspond à gauche (respectivement droite) si la langue courante se lit de gauche à droite (respectivement de droite à gauche),
  • TRAILING = 11 après dans le sens de lecture.
Cela correspond à droite (respectivement gauche) si la langue courante se lit de gauche à droite (respectivement de droite à gauche).

et les constantes de direction dans une séquence :

  • NEXT = 12
  • PREVIOUS = 13

Notes de bas de page[modifier | modifier le wikicode]

  1. Exemple d'un écran de 23 pouces en résolution 1980x1080 (diagonale approximative de 2229.12 pixels) : pixels par pouce.