import java.awt.* ; import java.awt.event.* ; class QuitButton extends Button { QuitButton () { super("quit") ; addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { System.err.println("Adios") ; System.exit(0) ; } ; }) ; } } /* class Quit implements ActionListener { public void actionPerformed (ActionEvent e) { System.exit(0) ; } } */ |
Quit
, donnée en commentaire.
import java.awt.* ; import java.awt.event.*; class GraphicCounter extends Panel { Button plus = new Button("+") ; Button moins = new Button("-") ; Label lab = new Label(" ", Label.CENTER) ; Counter c ; GraphicCounter (Counter c) { super() ; this.c = c ; add(plus) ; plus.addActionListener(new Plus(this)) ; add(lab) ; lab.setText(c.toString()) ; add(moins) ; moins.addActionListener(new Moins(this)) ; } ActionListener listener ; public void addActionListener(ActionListener listener) { this.listener = listener ; } public static void main (String[ ] args) { GraphicCounter c = new GraphicCounter(new Counter (0)) ; Frame f = new Frame("Counter") ; f.add("North", c) ; f.add("South", new QuitButton ()) ; f.setSize(150,75) ; f.setLocation(100,100) ; f.show() ; } } abstract class Op implements ActionListener { GraphicCounter gc ; Op (GraphicCounter gc) { this.gc = gc ; } abstract void op() ; public void actionPerformed (ActionEvent e) { op() ; gc.lab.setText(gc.c.toString()) ; if (gc.listener != null) gc.listener.actionPerformed(e) ; } } class Plus extends Op { Plus (GraphicCounter gc) { super(gc) ; } void op() { gc.c.incr() ; } } class Moins extends Op { Moins (GraphicCounter gc) { super(gc) ; } void op() { gc.c.decr() ; } } |
GraphicCounter
en argument, en effet, ces espions ont besoin
d'intervenir sur certains champs, essentiellement sur le
Counter
c et sur le Label
lab.
Il faut noter l'usage de this
dans l'appel de ces constructeurs.addActionListener
, c'est pour le prochain exercice.GraphicCounter
répond aux
questions.