Couleurs et fontes

Nous allons reprendre l'applet bonjour et la compléter pour définir une couleur de fond, une couleur du texte et la fonte utilisée pour le texte.

Un héritage important

En consultant la documentation du JDK, on voit que la classe Applet hérite des champs et méthodes de nombreuses classes.

	Class java.applet.Applet

	java.lang.Object
	   |
	   +----java.awt.Component
	           |
	           +----java.awt.Container
	                   |
	                   +----java.awt.Panel
	                           |
	                           +----java.applet.Applet

Intéressons nous à la classe Component qui est l'ancêtre commun à toute classe représentant un élément à afficher. Elle fournit un certain de nombre de méthodes importantes dont la classe Applet hérite et que l'on peut donc utiliser.

On trouve, parmi d'autres :

  1. Affichage : méthodes paint et repaint
  2. Couleur du fond : méthodes getBackground et setBackground
  3. Couleur de dessin par défaut : méthodes getForeground et setForeground
  4. Dimensions : méthodes getSize et setSize
  5. Fonte pour le texte : méthodes getFont et setFont
  6. Mesure de la taille du texte : méthode getFontMetrics

Il est nécessaire de se familiariser avec ces méthodes que nous retrouverons souvent.

Les couleurs

La classe Color

C'est la classe Color (du package java.awt) qui permet de gérer les couleurs. Celles-ci sont définies, dans un constructeur, par leurs trois composantes RVB (Rouge, Vert, Bleu). Ainsi pour utiliser la couleur rouge, on pourra passer par une variable c_rouge en écrivant :

	Color c_rouge=new Color(255,0,0);

L'applet RVB vous permet de voir évoluer les couleurs en fonction des composantes RVB.

La classe Color fournit quelques constantes représentant les couleurs de base : Color.black, Color.blue, Color.cyan, Color.darkGray, Color.gray, Color.green, Color.lightGray, Color.magenta, Color.orange, Color.pink, Color.red, Color.white et Color.yellow.

Utilisation dans l'applet

Reprenons l'applet bonjour et choisissons une couleur de fond et une couleur de dessin. Cela peut se faire dans la méthode init.

	public void init() {
	 msg="Bonjour de java !"; 
	 String parm=getParameter("nom");
	 if (parm!=null) msg=parm+" Java te dit bonjour !";
	 //on définit les couleurs utilisées
	 setBackground(Color.black);
	 setForeground(Color.yellow);
	}

On obtient le résultat suivant :

Les fontes

La classe Font

C'est la classe Font du package java.awt qui permet de gérer les fontes. Elle possède un constructeur qui utilise 3 paramètres : le nom de la fonte, son style (normal, italique, gras) et sa taille.
Le nom est une chaîne de caractères.
Le style est un nombre entier qui peut prendre les valeurs prédéfinies Font.PLAIN (style normal), Font.ITALIC (style italique) et Font.BOLD (style gras).
La taille est un nombre entier.

Les noms de fontes utilisables peuvent être obtenus dans un tableau de chaînes de caractères par l'instruction suivante :

	String[] fontes=Toolkit.getDefaultToolkit().getFontList();

En général on peut utiliser : Dialog, SansSerif, Serif, Monospaced, Helvetica, TimesRoman, Courier, DialogInput, ZapfDingbats.

Utilisation dans l'applet

Reprenons l'applet bonjour et choisissons une fonte pour l'affichage du texte.

	public void init() {
	 msg="Bonjour de java !"; 
	 String parm=getParameter("nom");
	 if (parm!=null) msg=parm+" Java te dit bonjour !";
	 //on définit les couleurs utilisées
	 setBackground(Color.black);
	 setForeground(Color.yellow);
	 //on choisit une fonte
	 setFont(new Font("TimesRoman",Font.BOLD+Font.ITALIC,20));
	}

Remarque : les constantes de style peuvent être additionnées pour combiner deux styles.

On obtient le résultat suivant :

Mesure de la taille d'un texte

La classe FontMetrics

Pour positionner correctement le texte à afficher, il est nécessaire de connaître ses dimensions, c'est à dire sa largeur et hauteur en pixels. Evidemment ces dimensions vont dépendre de la longueur du texte, mais aussi de la fonte choisie et de la taille de la fonte. La classe FontMetrics permet d'obtenir ces résultats. Elle propose les méthodes suivantes :
 - getAscent() : détermine le dépassement au dessus de la ligne de base.
 - getDescent() : détermine le dapassement en dessous de la ligne de base
 - getHeight() : détermine la hauteur totale
 - stringWidth(String) : détermine la largeur d'une chaîne

Le constructeur de la classe FontMetrics étant déclaré protected, il n'est pas possible de créer directement une variable de ce type. Il faudra passer par une méthode prévue à cet effet, par exemple la méthode statique getFontMetrics.

Mise en application

Reprenons une dernière fois l'applet bonjour pour qu'elle affiche son message en le centrant horizontalement. Il nous faudra calculer l'abscisse de la position d'affichage en appliquant la formule :
(largeur_totale-largeur_texte)/2.

Nous effectuerons ce calcul dans la méthode paint.

	public void paint(Graphics g) {
	 FontMetrics fm=getFontMetrics(getFont());
	 //getSize().width donne la largeur totale
	 int x=(getSize().width-fm.stringWidth(msg))/2;
	 g.drawString(msg, x, 20);
	}

On obtient le résultat suivant :



Retour au menu