15.12 Eines aus vielen - Kontrollfelder (JCheckBox)
Ein Kontrollfeld ist eine Komponente mit einem Zustand: »Ein« oder »Aus«. Der Zustand wird meistens als Rechteck oder Kreis neben einer Zeichenkette dargestellt. Kontrollfelder dienen dem Benutzer meistens als Auswahl von Optionen. Bei einer Pizza-Bestellung kann etwa ein Optionsfeld die Beläge anbieten. Hier würde ich dann immer Pilze, Paprika und Zwiebeln wählen.
Unter dem AWT heißt die Komponente für das Kontrollfeld Checkbox. Der JCheckBox unter Swing lassen sich gegenüber der Checkbox aus dem AWT verschiedene Grafiken für den eingeschalteten und ausgeschalteten Zustand zuweisen. Dazu dienen die Methoden setIcon() und setSelectedIcon(). Diese Methoden kommen alle aus der Oberklasse AbstractButton. Im Konstruktor lässt sich als zweiter Parameter ein Wahrheitswert angeben, der bestimmt, ob das Feld am Anfang gesetzt ist oder nicht.
Ändert sich der Zustand eines Felds (Selektion oder Deselektion), dann wird ein ItemEvent an alle registrierten ItemListener weitergeleitet. Nach dem Anlegen des Objekts kann die Methode setState(boolean) den Status verändern. Das Argument true markiert die Option des Kontrollfelds. getState() liefert den aktuellen Status des Kontrollfelds.
Listing 15.17 JCheckBoxDemo.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JCheckBoxDemo
{
public static void main( String args[] )
{
JFrame frame = new JFrame( "Tolle Fernsehserien" );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
Icon unchecked = new ImageIcon( ImageIconDemo.class.getResource( "not.gif" ) );
Icon checked = new ImageIcon( ImageIconDemo.class.getResource( "ok.gif" ) );
JCheckBox cb1 = new JCheckBox( "Ein Colt für alle Fälle", true );
cb1.setIcon( unchecked );
cb1.setSelectedIcon( checked );
frame.getContentPane().add( cb1, BorderLayout.NORTH );
JCheckBox cb2 = new JCheckBox( "MacGyver", false );
cb2.setIcon( unchecked );
cb2.setSelectedIcon( checked );
frame.getContentPane().add( cb2, BorderLayout.SOUTH );
// Listener für die Helden
ItemListener heldenListener = new ItemListener() {
public void itemStateChanged( ItemEvent e ) {
System.out.println( e );
}
};
cb1.addItemListener( heldenListener );
cb2.addItemListener( heldenListener );
frame.pack();
frame.show();
}
}
Hier klicken, um das Bild zu Vergrößern
Abbildung 15.10 Kontrollkästchen für unsere Helden
15.12.1 Ereignisse über ItemListener
Ein Checkbox-Objekt löst genau dann ein ItemEvent aus, wenn das Kontrollfeld ein- oder ausgeschaltet wird. Mittels addItemListener() wird ein ItemListener registriert, der bei einer Zustandsänderung über die itemStateChanged(ItemEvent)-Methode benachrichtigt wird.
Mittels der Objektmethoden getStateChange() von ItemEvent lässt sich der Status erfragen. Der Rückgabewert ist ein Integer, und wir sollten ihn mit den Konstanten Item Event.SELECTED und ItemEvent.DESELECTED vergleichen. Das Objekt ItemEvent stellt die Methode getItemSelectable() zur Verfügung, mit der wir herausfinden können, welche Checkbox das Ereignis ausgelöst hat. Somit ergibt sich noch eine andere Strategie, um den Zustand des Kontrollfelds zu erfragen. Wir rufen einfach die Objektmethode getState() aus dieser Checkbox auf, die getItemSelectable() lieferte. ItemEvent-Objekte werden auch bei Listen eingesetzt.
Beispiel Die Implementierung einer Ereignisbehandlung zeigt, wie wir den Text des Kontrollfelds und den Zustand einfach ausgeben können. Hier muss eine Klasse die Schnittstelle ItemListener implementieren.
public void itemStateChanged( ItemEvent e )
{
JCheckBox cb = (JCheckBox) e.getItemSelectable();
System.out.println( cb.getLabel() + ": " + cb.getState() );
}
|
|