15.11 Ein Auswahlmenü – Choice, JComboBox
 
Ein Auswahlmenü (engl. Choice-Box, auch Combo-Box) zeigt eine Zeichenkette aus einer Liste von Möglichkeiten an. Wird die Choice-Box aufgeklappt, kann ein Element aus der List-Box gewählt werden. Ein neuer Eintrag erscheint dann im Titel des Menüs. Unter dem AWT stellt die Klassse Choice ein Auswahlmenü zur Verfügung. Die JComboBox ist das Swing-Auswahlmenü, welches zudem ein Textfeld zur Eingabe anbietet. In diesem Textfeld können Texte in beliebigen Modellen dargestellt und ausgewählt werden; ein Tastendruck lässt die Liste zu dem Eintrag springen, dessen Buchstabe eingegeben wurde. Ob das Textfeld editiert werden kann, bestimmt setEditable(). Befinden sich zu viele Einträge in der Liste, stellt Swing automatisch eine scrollende Liste dar. Ab welcher Anzahl von Elementen die scrollende Liste dargestellt wird, bestimmt setMaximumRowCount(). Mit addItem() lassen sich Elemente hinzufügen, mit removeItem() wieder entfernen. Mit getItemAt(index) lassen sich die Elemente erfragen, und das aktuell ausgewählte Element erfahren wir mit getSelectedItem(); den Index mit getSelectedIndex().
Abbildung 15.9
Beispiel einer JComboBox
|
Beim Auswählen eines Eintrags wird ein ItemEvent ausgelöst, mit dem wir den ausgewählten String erfragen können. Das JComboBox-Objekt bietet Methoden, mit denen Zeichenketten eingefügt und entfernt werden können.
Listing 15.15
JComboBoxDemo.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JComboBoxDemo
{
public static void main( String args[] )
{
JFrame frame = new JFrame();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
String lang[] = {
"Java", "C++", "Perl", "Cobol", "Forth",
"Lisp", "Eiffel", "Smalltalk", "Apl",
"Ende"
};
// Erste Combo-Box
JComboBox combo1 = new JComboBox();
for ( int i = 0; i < lang.length; i++ )
combo1.addItem( lang[i] );
frame.getContentPane().add( combo1, BorderLayout.WEST );
combo1.addItemListener( new ItemListener() {
public void itemStateChanged( ItemEvent e ) {
JComboBox selectedChoice = (JComboBox)e.getSource();
if ( selectedChoice.getSelectedItem().equals("Ende") )
System.exit(0);
}
});
// Zweite Combo-Box
JComboBox combo2 = new JComboBox( lang );
combo2.setEditable( true );
combo2.setSelectedItem( "Sather" );
combo2.setMaximumRowCount( 4 );
frame.getContentPane().add( combo2, BorderLayout.EAST );
frame.pack();
frame.show();
}
}
Die Methode addItem() funktioniert nur dann, wenn im Konstruktor kein spezielles Modell angegeben wurde. Mit Modellen werden wir uns zu einem späteren Zeitpunkt näher beschäftigen. Sehen wir uns zunächst die Konstruktoren an.
class javax.swing.JComboBox
extends JComponent
implements ItemSelectable, ListDataListener, ActionListener, Accessible
|
|
JComboBox()
Erzeugt ein leeres Auswahlmenü mit einem Standard-Modell. |
|
JComboBox( ComboBoxModel aModel )
Erzeugt ein Auswahlmenü mit einem Combo-Box-Modell, welches die Daten speichert. |
|
JComboBox( Object items[] )
Erzeugt ein Auwahlmenü mit Elementen, die im Feld items angegeben sind. |
|
JComboBox( Vector items )
Erzeugt ein Auwahlmenü mit Elementen, die Vektor items angegeben sind. |
Elemente lassen sich jetzt hinzufügen und löschen. Etwas seltsam ist, dass die JComboBox selbst diese Methoden anbietet. Ähnliche Swing-Komponenten (wie die JTable) bieten diese Anfrage- und Veränderungmethoden nicht an, sondern erwarten direkt eine Änderung am Modell und nicht an der Komponente. Das Besondere bei Swing-Komponenten ist ja gerade, dass das Modell verändert und abgefragt wird. Im Fall der JComboBox speichert sie die Daten natürlich immer noch nicht selbst, sondern leitet sie an das Modell weiter.
|
void addItem( Object anObject )
Fügt einen Eintrag dem Modell hinzu. |
|
Object getItemAt( int index )
Liefert den Eintrag an der Position index. Die Rückgabe ist null, wenn der Index außerhalb des Bereichs ist. |
|
int getItemCount()
Liefert die Anzahl der Einträge im Auswahlmenü. |
|
void insertItemAt( Object anObject, int index )
Fügt einen Eintrag an eine bestimmte Stelle ein. |
|
void removeItem( Object anObject )
Löscht den Eintrag aus der Liste. |
|
void removeItemAt( int position )
Löscht den Eintrag an der Position position. |
|
void removeAll()
Entfernt alle Einträge aus dem Auswahlmenü. |
|
String getSelectedItem()
Liefert die aktuelle Wahl als String. |
|
Object[] getSelectedObjects()
Liefert ein Array mit den selektierten Einträgen. null, wenn keine Einträge vorhanden sind. |
|
int getSelectedIndex()
Liefert den Index des aktuell selektierten Eintrags. |
|
void select( int position )
Setzt den Eintrag im Titel des Menüs auf den Eintrag mit der Nummer position. |
|
void select( String string )
Setzt den Eintrag string in die Titelleiste, wenn dieser in der Liste ist. Falls mehrere Einträge gleich dem string sind, wird der Eintrag verwendet, der zuerst gefunden wurde. Dieser besitzt dann also den kleinsten Index. |
|
void addItemListener( ItemListener aListener )
Hängt einen ItemListener an das Auswahlmenü an. |
|
void removeItemListener( ItemListener aListener )
Löst den ItemListener vom Auswahlmenü. |
15.11.1 ItemListener
 
Die Schnittstelle ItemListener wird von allen Objekten implementiert, die an einem Auswahlereignis interessiert sind. Wird ein Element ausgewählt, wird die Methode itemStateChanged() vom Objekt auf allen registrierten ItemListenern aufgerufen. Folgende Komponenten besitzen Einträge und können dementsprechend ItemChanged-Ereignisse auslösen: Checkboxen, Checkbox-Menü-Einträge, Choice-Menüs und Listen.
Beispiel Die Methode itemStateChanged() soll in Abhängigheit von der Auswahl ein JLabel-Objekt mit dem Namen label sichtar oder unsichtbar machen.
public void itemStateChanged( ItemEvent e )
{
if (e.getStateChange() == ItemEvent.SELECTED)
label.setVisible( true );
else
label.setVisible( false );
}
|
interface java.awt.event.ItemListener
extends EventListener
|
|
void itemStateChanged( ItemEvent e )
Wird aufgerufen, wenn ein Eintrag selektiert oder deselektiert wird. |
Die Funktion itemStateChanged() hat als Parameter ein ItemEvent-Objekt.
class java.awt.event.ItemEvent
extends AWTEvent
|
|
ItemSelectable getItemSelectable()
Gibt ein ItemSelectable-Objekt von der Komponente zurück, die das Ereignis ausgelöst hat. |
|
Object getItem()
Gibt den Eintrag der Liste zurück. |
|
int getStateChange()
Gibt den Status des Eintrags zurück. Die Klasse definiert dazu die Konstanten Item Event.SELECTED und ItemEvent.DESELECTED. |
|