Helmichs Informatik-Lexikon

Button abfragen

Man kann eine Java-Anwendung zwar mit einem oder mehreren Buttons ausstatten, doch wenn man die Buttons nicht aktiviert, werden sie lediglich angezeigt. Beim Klicken auf einen Button passiert noch nichts. Um dies zu erreichen, sind mehrere Schritte notwendig.

Einen ActionListener hinzufügen

Man muss dem Button einen ActionListener hinzufügen. Das geschieht durch den Aufruf der gleichnamigen Methode der Klasse Button:

btnOK.addActionListener(this);

Jetzt kann der Button zwar Botschaften wie "Klicken" in Empfang nehmen, aber die Anwendung kann noch nicht auf solche Botschaften reagieren. Auch die Anwendung selbst muss entsprechend erweitert werden.

Erweiterung der Java-Anwendung

Die Anwendung benötigt nun eine Methode, die im Hintergrund auf Ereignisse wie "Mausklick" oder "Button gedrückt" wartet und dann entsprechend reagiert. Diese Methode kann nicht irgendeine beliebige sein, sondern muss bestimmten formalen Vorgaben genügen. Dies wird normalerweise durch die Interface-Technik erreicht, die eine Art Mehrfachvererbung erlaubt.

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Test extends JApplet implements ActionListener
{  
…

Dieser Quelltext zeigt ein Java-Applet (heute veraltet), das Methoden implementieren will, die vom Interface ActionListener zur Verfügung gestellt werden.

Ganz korrekt ist diese Angabe allerdings nicht. Das Interface stellt keine normalen Methoden zur Verfügung, sondern abstrakte Methoden einschließlich der erforderlichen Parameter. Eine Implementation der Methode wird vom Interface nicht geliefert, die muss dann im Applet selbst erfolgen. Die Betonung liegt hier auf "muss".

Die actionPerformed()-Methode

public void actionPerformed(ActionEvent ereignis)
{
if (ereignis.getSource() == btnOK)
   meldung = "OK-Button geklickt";
else if (ereignis.getSource() == btnCancel)
  meldung = "Cancel-Button geklickt";
repaint();
} 

Der Parameter vom Typ ActionEvent ist hier unbedingt erforderlich - das ist vom Interface vorgegeben bzw. von der abstrakten Methode actionPerformed(). Alle Objekte der Klasse ActionEvent haben eine sondierende Methode getSource(), die ermittelt, welches Ereignis eingetreten ist.

Im Gegensatz zu actionPerformed() ist getSource() keine abstrakte Methode, muss also nicht unbedingt in der aufrufenden Klasse verwendet und überschrieben werden.

In der if-Anweisung wird zunächst gefragt, ob der OK-Button geklickt wurde. Falls ja, wird der String meldung auf den entsprechenden Wert gesetzt. Wenn nicht, wird gefragt, ob der Cancel-Button geklickt wurde. Ist dies der Fall, wird der String meldung auf den entsprechenden Wert gesetzt.

Anschließend wird die repaint()-Methode aufgerufen, welche ihrerseits die paint()-Methode des Applets aufruft, so dass der String meldung mit dem drawString()-Befehl aktualisiert werden kann.