Component sont les objets graphiques
élémentaires, par exemple un bouton Button etc.
Les composants possèdent entre autres une méthode paint dont
la mission est de dessiner le composant. Cette méthode est appelée par
le système graphique quand cela lui semble utile. On peut par ailleurs
forcer le rafraichissement d'un composant en invoquant sa méthode
repaint.Container sont des regroupements de composants.
Ils possèdent entre autre une méthode add(Component c) pour
enregistrer les nouveaux composants.
Par héritage les conteneurs sont des composants.Frame sont des fenêtres affichées à
l'écran avec notamment un titre (passé en argument du constructeur).
Par héritage, les cadres sont des conteneurs.
Les Frame possèdent une méthode show qui sert à
effectivement « montrer » la fenêtre à l'écran, une fois celle ci
construite.
Component et
Container sont abstraites.Graphics dans lequel on peut dessiner par les
méthodes idoines. Que représenet ce contexte, et pourquoi
repaint ne prend-elle pas d'argument ?
repaint d'un
conteneur ?
|
import java.awt.* ; class Minimal { public static void main(String [] arg) { Frame f = new Frame(arg[0]) ; f.show() ; } } |
Label, qui affiche juste la chaîne passée en argument au
constructeur.
Écrire la classe Salut dont les objets sont des fenêtres
qui disent bonjour.Color.red, Color.white etc.
Concevoir, par héritage de la classe Label une classe des
étiquettes au fond colorié.LayoutManager qui règle
le positionnement relatif de leurs composants.
Le conteneur le plus simple est le Panel et son
LayoutManager est par défaut un FlowLayout qui
affiche ses composants les uns à la suite des autres, d'abord de
gauche à droite, puis sur une nouvelle ligne en cas de débordement.
Écrire la classe Simple
qui produit cette fenêtre
FlowLayout qui gère la répartition des boutons de cette
façon, un peu comme des lignes de texte centrées.
ActionListener. Ceux-ci sont enregistrés au préalable par
la méthode addActionListener (du bouton).
Ainsi le bouton mininal est :
|
import java.awt.* ; import java.awt.event.* ; class MinimalButton extends Button { MinimalButton () { super("Minimal") ; addActionListener(new Minimal ()) ; } } class Minimal implements ActionListener { public void actionPerformed (ActionEvent e) { System.err.println("Bouton solicité") ; } } |
QuitButton des boutons qui
servent à quiter une application.|
class Counter { private int n ; Counter(int n) { this.n = n ; } void incr() { n++ ; } void decr() { n-- ; } int get() { return n ; } public String toString() {return Integer.toString(n) ; } } |
GraphicCounter
qui, une fois ajouté à un Frame quelconque, donnera ce résultat.
GraphicCounter peut être
une sous classe.
ActionListener.
Un démarche excessivement objet est de concevoir une classe abstraite
des espions de nos deux boutons regroupant ce que ces espions ont de
commun.
On peut changer le texte affiché dans un Label par sa
méthode setText(String txt).
GraphicCounter.
LayoutManager par défaut des Frame gère
cinq zones, à savoir quatre bordures désignées par les
quatre points cardinaux ("North", etc.), et une zone
centrale ("Center").
Sa méthode add prend une chaîne désignant la zone en premier
argument.
L'effet recherché est celui-ci :
Canvas. Il correspond à
un rectange dans lequel la méthode paint dessinera.
Voici un canevas dont la méthode paint dessine le triangle de
Sierpinsky à l'ordre donné par le contenu d'un compteur.
|
import java.awt.* ; class SiepCanvas extends Canvas { private Counter c ; SiepCanvas(Counter c) { super() ; this.c = c; } public void paint(Graphics g) { int w = getSize().width ; int h = getSize().height ; Point top = new Point(w/2,0) ; Point left = new Point(0,h) ; Point right = new Point(w,h) ; // effectivement dessiner par une méthode non-donnée. paintSiep(g, c.get() , top, left, right) ; } } |
SiepCanvas est dans un
Frame quelconque.
À votre avis, que se passe-t-il lorsque que je redimensionne la
fenêtre à la souris.Counter est suggéré.ActionListener. Du point de vue de la class
GraphicCounter cela demande d'ajouter une méthode
addActionListener à la classe GraphicCounter,
afin d'enregistrer l'espion, et d'invoquer l'espion chaque fois que
l'un des boutons du compteur graphique est solicité.
Noter que la construction des espions Plus et
Moins par héritage facilite un peu cette dernière modification.Ce document a été traduit de LATEX par HEVEA et HACHA.