14.6 Schaltflächen
Eine Schaltfläche (engl. button) ermöglicht es dem Anwender, eine Aktion auszulösen. Schaltflächen sind meistens beschriftet und stellen eine Zeichenkette dar oder tragen eine Grafik, etwa im Fall eines Symbols in der Symbolleiste. Unter dem AWT kann eine Schaltfläche nur Text, aber keine Icons darstellen.
Swing kennt unterschiedliche Schaltflächen. Dazu zählen JButton für einfache Schaltflächen, aber auch Schaltflächen zum Ankreuzen.
14.6.1 Normale Schaltflächen (JButton)

Eine Schaltfläche (engl. button) ermöglicht es dem Anwender, eine Aktion auszulösen. Schaltflächen sind meistens beschriftet und stellen eine Zeichenkette dar oder tragen eine Grafik, etwa im Fall eines Symbols in der Symbolleiste. Unter dem AWT kann eine Schaltfläche nur Text, aber keine Icons darstellen. Die Schaltfläche JButton reagiert auf Aktivierung und erzeugt ein ActionEvent, das ein angehängter ActionListener meldet.

Abbildung 14.21: JButton mit einer einfachen Schaltfläche zum Schließen
Listing 14.10: com/tutego/insel/ui/swing/JButtonDemo.java, main()
JFrame frame = new JFrame();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setLayout( new FlowLayout() );
// Button 1
final Icon icon1 = new ImageIcon(
JButtonDemo.class.getResource( "/images/user-trash-full.png" ) );
final Icon icon2 = new ImageIcon(
JButtonDemo.class.getResource( "/images/user-trash.png" ) );
final JButton button1 = new JButton( icon1 );
frame.add( button1 );
ActionListener al = new ActionListener() {
@Override public void actionPerformed( ActionEvent e ) {
button1.setIcon( icon2 );
}
};
button1.addActionListener( al );
// Button 2
final JButton button2 = new JButton( "Ende" );
frame.add( button2 );
button2.addActionListener( new ActionListener() {
@Override public void actionPerformed( ActionEvent e ) {
System.exit( 0 );
}
} );
frame.pack();
frame.setVisible( true );
Die JButton-API
Es gibt mehrere Konstruktoren für JButton-Objekte. Die parameterlose Variante erzeugt eine Schaltfläche ohne Text. Der Text lässt sich mit setText() nachträglich ändern. In der Regel nutzen wir den Konstruktor, dem ein String mitgegeben wird.
class javax.swing.JButton |
- JButton()
Erzeugt eine neue Schaltfläche ohne Aufschrift. - JButton(String text)
Erzeugt eine neue Schaltfläche mit Aufschrift. - JButton(Icon icon)
Erzeugt eine neue Schaltfläche mit Icon. - JButton(String text, Icon icon)
Erzeugt eine neue Schaltfläche mit Aufschrift und Icon. - void setText(String text)
Ändert die Aufschrift der Schaltfläche auch im laufenden Betrieb.[198](Vergleichen wir das mit den Methoden der Klasse java.awt.Label. Hier heißen die Methoden zum Lesen und Ändern des Textes setLabel() und getLabel(). Dies ist für mich wieder eines der AWTRätsel. Warum heißt es bei einem java.awt.Label-Objekt setText()/getText() und bei einem java.awt.Button-Objekt setLabel()/getLabel()? Immerhin heißt es bei den Swing-Komponenten JLabel und JButton konsequent setText()/getText().) - String getText()
Liefert die Aufschrift der Schaltfläche. - void addActionListener(ActionListener l)
Fügt dem Button einen ActionListener hinzu, der die Ereignisse abgreift, die durch die Schaltfläche ausgelöst werden. - void removeActionListener(ActionListener l)
Entfernt den ActionListener wieder. Somit kann er keine weiteren Ereignisse mehr abgreifen.
Hinweis |
Wörter mit einer starken emotionalen Bindung sollten vermieden werden. In englischen Programmen müssen Wörter wie »kill« oder »abort« umgangen werden.[199](Siehe dazu das Buch »Tog on Interface« von Bruce Tognazzini, auszugsweise unter http://www.asktog.com/TOI/toi06KeyboardVMouse1.html.) |
14.6.2 Der aufmerksame ActionListener
Klicken wir auf die Schaltfläche, so sollte die Aktion gemeldet werden. Diese wird in Form eines ActionEvent-Objekts an den Zuhörer (einen ActionListener) gesendet. Ein ActionListener wird mit der Methode addActionListener() an die Objekte angeheftet, die Aktionen auslösen können. ActionListener ist eine Schnittstelle mit der Methode actionPerformed(). Die Schnittstelle ActionListener wiederum erweitert die Schnittstelle EventListener, die von allen Listener-Interfaces implementiert werden muss.

Abbildung 14.22: Die Beziehung zwischen ActionListener und ActionEvent
interface java.awt.event.ActionListener |
- void actionPerformed(ActionEvent e)
Wird aufgerufen, wenn eine Aktion ausgelöst wird.
Werfen wir noch einmal einen Blick auf die Implementierung unserer beiden ActionListener-Klassen, die als anonyme innere Klasse realisiert sind:
ActionListener al = new ActionListener() {
public void actionPerformed( ActionEvent e ) {
button1.setIcon( icon2 );
}
};
button2.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e ) {
System.exit( 0 );
}
} );
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.