Die Registrierung eines Listener-Objekts richtet einen Kommunikationskanal zwischen dem GUI-Objekt und dem Listener ein.
In diesem Programm ist das ButtonFrame2-Objekt
als ein ActionListener für seinen eigenen Button registriert.
class ButtonFrame2 extends JFrame implements ActionListener
{
JButton bChange ;
// Konstruktor
public ButtonFrame2()
{
bChange = new JButton("Klick mich!");
getContentPane().setLayout( new FlowLayout() );
// das ButtonFrame-Objekt als Listener für den JButton registrieren
bChange.addActionListener( this );
getContentPane().add( bChange );
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
// vom Interface geforderte Listener-Methode
public void actionPerformed( ActionEvent evt)
{
. . . . . .
}
}
Wir prüfen die Anweisung im ButtonFrame2 Konstruktor:
bChange.addActionListener( this );
Hier kommt, was das tut:
bChange verweist auf den Button.addActionListener()
ButtonFrame2-Objekt.
this verweist auf das Objekt, das konstruiert wird, den Frame.
bChange auf seine Methode
addActionListener() auszuführen, um den Frame (this)
als einen Listener für Buttonklicks zu registrieren.actionEvents dieses Buttons.actionPerformed() Methode geschickt
Wir könnten denken, dass der ButtonFrame2 Frame automatisch
als Listener für alle GUI-Komponenten, die er enthält, registriert werden sollte.
Aber das würde die Flexibilität ausschalten, die für komplizierte GUI-Applikationen
gebraucht wird.
Wir möchten, dass das Programm etwas tut, wenn der Button angeklickt wird. Wo sollte der Code "tue etwas" stehen?