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
"Helvetica" (SansSerif, Arial) "TimesRoman" (Serif) 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.
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 12 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 |
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 du coin supérieur
gauche, la larguer et la hauteur 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( )
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.
Pour utiliser plusieurs
zones de clipping, il faut 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) |