zur vorherigen Seite   zum Inhaltsverzeichnis   zur nächsten Seite

Antwort:

Die Registrierung eines Listener-Objekts richtet einen Kommunikationskanal zwischen dem GUI-Objekt und dem Listener ein.

Einen Listener registrieren

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:

  1. bChange verweist auf den Button.
  2. Der Button hat eine Methode, die einen Listener für seine Ereignisse registriert: addActionListener()
  3. Der Listener ist das ButtonFrame2-Objekt.
    • Das Wort this verweist auf das Objekt, das konstruiert wird, den Frame.
  4. Die Anweisung fordert den Button bChange auf seine Methode addActionListener() auszuführen, um den Frame (this) als einen Listener für Buttonklicks zu registrieren.
  5. Jetzt horcht der Frame auf actionEvents dieses Buttons.
  6. Events werden an die 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.

FRAGE 13:

Wir möchten, dass das Programm etwas tut, wenn der Button angeklickt wird. Wo sollte der Code "tue etwas" stehen?