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.