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?