A partir d'une applet, il est possible d'afficher du texte dans la fenêtre de l'applet ou dans la console JAVA. Beaucoup d'utilisateurs des navigateurs ignorent l'existence de cette fenêtre qui est utilisée par la machine virtuelle pour envoyer ses messages aux utilisateurs. Pour l'activer dans IE, il faut aller dans le menu "Affichage" et dans Netscape, il faut aller dans "Communicator", "Outils". Pour afficher la chaîne de caractères str dans la console, la syntaxe est : System.out.print(str) (pas de saut de ligne après) ou System.out.println(str) .
Il est possible d'utiliser la console pour le débogage des programmes.
Pour afficher du texte dans la fenêtre d'une applet, il suffit d'utiliser la méthode drawString( ) de la classe Graphics qui fait parti du package java.awt. Cette méthode dessine la chaîne passée comme premier argument à partir du point de coordonnées (x, y). Le préfixe utilisé lors de l'appel à la méthode doit être le nom du contexte graphique (nom de l'instance de la classe Graphics en cours d'utilisation).
Les caractères de contrôle comme '\r' (CR), '\n' (NL), ... sont fonctionnels dans la console JAVA mais ne sont pas utilisables avec la méthode drawString( ) : pour afficher du texte sur plusieurs lignes, il faut découper la chaîne et préciser les coordonnées de départ de chaque sous-chaîne.
Sauf indications contraires, la couleur d'écriture est la couleur par défaut (en général le noir) et la fonte utilisée est la fonte par défaut (variable selon le navigateur utilisé). Il est toujours préférable de préciser au début de la méthode init( ) la fonte qui sera utilisée.
Avant de pouvoir utiliser une fonte, il faut créer une instance d'un objet Font et l'initialiser avec les paramètres suivants :
Le nom de la fonte : Les machines virtuelles des navigateurs possèdent en général les fontes "SansSerif" (Helvetica, Arial) "Serif" (TimesRoman) qui sont des fontes proportionnelles et la fonte "Courier" qui possède un espacement fixe.
Le style des caractères : Il existe trois constantes Font.PLAIN = 0 (normal), Font.BOLD = 1 ( gras ) et Font.ITALIC = 2 ( italique ) qui peuvent être combinées.
La taille de la fonte en points.
On trouvera dans la seconde partie de l'exemple ci-dessous comment chercher puis afficher les polices présentes dans la machine virtuelle utilisée. La méthode getFontList ( ) de la classe abstraite Toolkit retourne un tableau de chaînes de caractères contenant les noms des fontes.
Il est possible d'utiliser des fontes spécifiques mais il faut avant chercher si elles sont présentes sur la machine qui exécute le programme ce qui demande en général beaucoup de temps.
Il est préférable de se limiter aux fontes génériques.
Afin de pouvoir gérer l'affichage, on dispose de la classe FontMetrics dont les méthodes retournent des informations sur les caractéristiques de la fonte en cours d'utilisation. Pour pouvoir utiliser ces méthodes, il faut commencer par créer une instance FontMetrics au moyen de la méthode getFontMetrics( ) de la classe Graphics. Le préfixe utilisé pour appeler cette méthode doit être le nom du contexte graphique en cours d'utilisation. Chaque fois que la fonte d'affichage est changée il faut bien sûr créer une nouvelle instance FontMetrics. Les méthodes les plus utiles de cette classe sont :
getHeight( ) qui retourne la hauteur totale (en pixels) de la fonte, charWidth( ) qui retourne la largeur en pixels du caractère passé en argument et enfin de stringWidth( ) qui retourne la longueur (en pixels) de la chaîne passée en argument. Cette dernière méthode permet de centrer une chaîne ou comme dans l'exemple de réaliser un affichage complexe qui mélange différentes fontes et différentes couleurs.
import java.applet.*; public class fontes extends Applet |
La couleur du pinceau dans l'objet graphique g est celle de l'objet Color activé par l'instruction g.setColor( ) .
JAVA utilise la synthèse additive rouge, vert, bleu. Les couleurs sont codées sur 24 bits en utilisant 8 bits pour chaque couleur fondamentale. Le nombre de couleurs possibles est donc 256*256*256 = 16777216. Le nombre de couleurs effectivement affichées dépend de la carte graphique du client.
Pour définir une couleur, on utilise le constructeur Color( R, V, B) . Les arguments sont soit des entiers (compris entre 0 et 255) soit des flottants (compris entre 0.0f et 1.0f).
Color macouleur = new Color (0, 15, 100);
La classe Color possède 13 couleurs prédéfinies :
Couleur |
Nom |
Rouge |
Vert |
Bleu |
Blanc |
Color.white |
255 |
255 |
255 |
Bleu |
Color.blue |
0 |
0 |
255 |
Cyan |
Color.cyan |
0 |
255 |
255 |
Gris pâle |
Color.ligthGray |
192 |
192 |
192 |
Gris sombre |
Color.darkGray |
64 |
64 |
64 |
Gris |
Color.gray |
128 |
128 |
128 |
Magenta |
Color.magenta |
255 |
0 |
255 |
Noir |
Color.black |
0 |
0 |
0 |
Orange |
Color.orange |
255 |
200 |
0 |
Rose |
Color.pink |
255 |
175 |
175 |
Rouge |
Color.red |
255 |
0 |
0 |
Jaune |
Color.yellow |
255 |
255 |
0 |
Vert |
Color.green |
0 |
255 |
0 |
Les graphistes utilisent en général le système HSB : hue, saturation, brightness (teinte, saturation, luminosité). Les méthodes HSBtoRGB() et RGBtoHSB() permettent d'effectuer les conversion entre les deux systèmes. La méthode RGBtoHSB retourne les valeurs HSB dans un tableau de flottants passé en argument (consulter l'exemple pour la syntaxe). Pour plus de détails sur le système HSB consulter cette page .
L'applet suivante donne un exemple d'utilisation des objets FontMetrics , des exemples de création de couleurs en RVB et HSB et d'utilisation des méthodes de cette classe.
import java.applet.*; public class couleurs extends Applet public void paint(Graphics g) |
La feuille de dessin est une matrice de points (pixels). Les coordonnées du coin supérieur gauche sont (0, 0). La méthode size( ) retourne la taille de la feuille .
Les coordonnées du coin inférieur droit sont donc size( ).width et, size( ).height.
Attention : La méthode resize( ) ne fonctionne pas avec les applets :
La taille de la feuille est imposée par les valeurs de width et height de la balise <Applet>
Toutes les méthodes de dessin ci-dessous fonctionnent également dans un tampon mémoire. Toutefois j'ai constaté que l'utilisation d'entiers supérieurs à 32768 provoque alors des dépassements de capacité (non signalés par la machine virtuelle !).
Lors de l'utilisation des méthodes de dessin dans un tampon, il semblerait que les entiers int sont codés sur seulement 2 octets ???
La méthode setBackground( ) permet d'imposer la couleur du fond.
drawLine( ) : Méthode utilisée pour le tracé de droites. Les 4 paramètres sont les coordonnées des extrémités de la droite.
Il n'existe pas de méthode spécifique pour allumer un seul pixel : il faut utiliser la méthode drawLine avec des coordonnées de début identiques à celles de fin.
Il n'existe pas dans les différentes versions 1.X de JAVA de méthodes pour modifier le style des traits (épaisseur, tirets, pointillés ...)
drawRect( ) utilise 4 paramètres : les deux coordonnées x et y du coin supérieur gauche, la largeur L et la hauteur H du rectangle.
fillRect( ) remplit le rectangle avec la couleur actuelle du pinceau.
clearRect( ) utilise la couleur du fond pour peindre le rectangle. Pratique pour effacer une partie de la feuille.
drawRoundRect( ) et fillRoundRect( ) dessinent des rectangles aux coins arrondis : il faut ajouter deux paramètres supplémentaires pour préciser les dimensions de l'arrondi.
clipRect(x, y, L ,H) est une méthode extrêmement puissante qui supprime les portions des tracés situées à l'extérieur du rectangle défini par la méthode. Un appel ultérieur n'est possible que si la nouvelle zone est contenue dans la première.
setClip(x, y, L, H) fait la même chose avec plus de possibiltés. Il est possible de redéfinir sans limitations une nouvelle zone. On peut supprimer le clipping avec l'instruction setClip(null).
On peut aussi terminer le dessin dans la première zone, faire un appel à getGraphics( ) pour réinitialiser le contexte graphique puis définir une nouvelle zone avec clipRect( ) et dessiner dans la nouvelle zone ...
Les cercles, ellipses, arcs peuvent s'inscrire dans un rectangle : leurs méthodes de tracé [ drawOval( ) , fillOval( ), drawArc( ), fillArc( ) ] utilisent les coordonnées de ce rectangle comme paramètres.
Pour le tracé des arcs, il faut préciser en outre l' angle de départ de l'arc en degrés (0 correspond à trois heures, 90 à midi ...) et la longueur de l'arc (toujours en degrés). Si la longueur de l'arc est positive on suit l'arc dans le sens direct.
Les méthodes drawPolygon( ) et fillPolygon( ) utilisent deux tableaux contenant les coordonnées des sommets du polygone et le nombre de sommets à prendre en compte. Le dernier sommet est toujours relié au premier.
Ces méthodes sont illustrées par l'exemple ci-dessous.
import java.applet.*; public class dessins extends Applet public void init() public void paint(Graphics g) |