Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 3. Auflage
<< | < | > | >> | API | Kapitel 32 - AWT-Dialogelemente

## 32.8 Choice

- 32.8 Choice

Ein `Choice`-Menü ist ein aufklappbares Textfeld, dessen Inhalt aus einer vom Programm vorgegebenen Liste ausgewählt werden kann. Dialogelemente des Typs `Choice` entsprechen den unter Windows üblichen Drop-Down-Listboxen, einer eingeschränkten Form der Comboboxen, bei denen das zugehörige Editfeld nicht separat geändert werden kann.

    public Choice()
| java.awt.Choice

Der parameterlose Konstruktor erstellt ein `Choice`-Objekt mit einer leeren Liste.

Eine der wichtigsten Methoden der Klasse `Choice` ist `add`:

    public void add(String item)
| java.awt.Choice

Jeder Aufruf von `add` hängt das übergebene Element `item` an das Ende der Liste an. Die Elemente werden dabei in der Reihenfolge der Aufrufe von `add` eingefügt. Eine automatische Sortierung wurde in Java nicht vorgesehen.

|  |  |  | Analog zur Methode `add` gibt es eine bedeutungsgleiche Methode `addItem`. Während in der Klasse `Choice` beide Methoden verwendet werden können, wurde die Methode `addItem` in der Klasse `List` mit dem JDK 1.2 als `deprecated` markiert, sollte also nicht mehr verwendet werden. |  |
JDK1.1-1.4

Für den Zugriff auf die Elemente der Combobox stehen die Methoden `getItemCount`, `getSelectedIndex`, `getItem` und `getSelectedItem` zur Verfügung:

    public int getSelectedIndex()

    public String getItem(int n)

    public String getSelectedItem()

    public int getItemCount()
| java.awt.Choice

`getItemCount` liefert die Anzahl der Elemente, die sich gegenwärtig in der Liste befinden. Mit `getItem` kann auf das n-te Element der Liste über seinen Index zugegriffen werden; die Zählung beginnt bei 0.

`getSelectedIndex` liefert den Index des selektierten Elements, so daß durch Übergabe dieses Wertes an `getItem` das aktuelle Element beschafft werden kann. Alternativ dazu kann `getSelectedItem` aufgerufen werden, um ohne explizite Kenntnis der internen Nummer das selektierte Element zu beschaffen.

Ebenso wie der Anwender kann auch das Programm selbst ein Element aus der Liste selektieren:

    public select(int)
    public select(String)
| java.awt.Choice

Hierbei wird an `select` wahlweise ein `int` oder ein `String` übergeben. Im ersten Fall wird das Element über seinen numerischen Index selektiert, im zweiten direkt durch Suche des angegebenen Wertes.

Ebenso wie eine `Checkbox` sendet auch ein `Choice`-Element Item-Ereignisse, wenn ein Element selektiert wurde. Um auf dieses Event zu reagieren, ist durch Aufruf von `addItemListener` ein `ItemListener` zu registrieren:

    public void addItemListener(ItemListener l)
| java.awt.Choice

Ein Item-Event wird immer dann gesendet, wenn ein anderes Element ausgewählt wurde. In diesem Fall wird im Ereignisempfänger die Methode `itemStateChanged` mit einem Argument vom Typ `ItemEvent` aufgerufen:

    public abstract void itemStateChanged(ItemEvent e)
| java.awt.event.ItemEvent

Das `ItemEvent` stellt die Methode `getItemSelectable` zur Verfügung, mit der ermittelt werden kann, durch welches `Choice`-Element das Ereignis ausgelöst wurde. Zusätzlich gibt es die Methode `getItem`, die das ausgewählte Element als `String` zur Verfügung stellt:

    public ItemSelectable getItemSelectable()

    public Object getItem()
| java.awt.event.ItemEvent

Damit kann offensichtlich auf zwei unterschiedliche Arten auf die Änderung der Auswahl reagiert werden. Einerseits kann mit `getItemSelectable` ein `Choice`-Element beschafft und mit `getSelectedItem` das selektierte Element ermittelt werden. Andererseits kann `getItem` aufgerufen und das Ergebnis in einen `String` umgewandelt werden. Das folgende Listing demonstriert dies beispielhaft:

    001 /* Choice2.inc */
    002
    003 public void itemStateChanged(ItemEvent event)
    004 {
    005   Choice choice = (Choice) event.getItemSelectable();
    006   String str1 = choice.getSelectedItem();
    007   String str2 = (String) event.getItem();
    008   System.out.println("choice.getSelectedItem: " + str1);
    009   System.out.println("event.getItem:          " + str2);
    010 }
| Choice2.inc

Listing 32.11: Behandlung der Ereignisse einer Choice-Komponente

Das Beispielprogramm zum Testen der `Choice`-Komponente sieht so aus:

    001 /* Choice1.inc */
    002
    003 private void customizeLayout(Panel panel)
    004 {
    005   panel.setLayout(new FlowLayout());
    006   Choice choice = new Choice();
    007   choice.addItemListener(this);
    008   choice.add("rot");
    009   choice.add("grün");
    010   choice.add("gelb");
    011   choice.add("blau");
    012   choice.add("rosa");
    013   choice.add("lila");
    014   panel.add(choice);
    015 }
| Choice1.inc

Listing 32.12: Verwendung einer Choice-Komponente

Abbildung 32.8: Ein Dialog mit einer Choice-Komponente

Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 3. Auflage, Addison Wesley, Version 3.0
<< | < | > | >> | API | © 1998-2002 Guido Krüger, http://www.javabuch.de