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

## 32.9 List

- 32.9 List

Eine `List` ist eine listenartige Darstellung von Werten, aus denen der Anwender einen oder mehrere auswählen kann. Anders als ein `Choice`-Element ist ein Element der Klasse `List` ständig in voller Größe auf dem Bildschirm sichtbar. Unter Windows werden Objekte der Klasse `List` durch Listboxen dargestellt.

    public List()

    public List(int size)

    public List(int size, boolean multiselect)
| java.awt.List

Der parameterlose Konstruktor legt eine leere Listbox an, deren dargestellte Größe vom Layoutmanager begrenzt wird. Der Parameter `size` legt die Anzahl der angezeigten Zeilen fest. Dabei können auch mehr Elemente in der Listbox enthalten sein, als auf einmal angezeigt werden können. `List`-Dialogelemente können wahlweise die Mehrfachselektion von Elementen zulassen. Wird bei der Konstruktion der Listbox der Parameter `multiselect` auf `true` gesetzt, kann der Anwender nicht nur ein Element, sondern auch mehrere Elemente selektieren.

Das Dialogelement `List` bietet nahezu dieselbe Funktionalität wie `Choice`. Zusätzlich stehen die Methoden `getSelectedIndexes` und `getSelectedItems` zur Verfügung, um bei einer Mehrfachselektion auf die selektierten Elemente zugreifen zu können:

    public int[] getSelectedIndexes()

    public String[] getSelectedItems()
| java.awt.List

`getSelectedIndexes` liefert ein Array mit den Indexpositionen aller selektierten Elemente, und `getSelectedItems` liefert eine Liste der Werte selbst.

Mit den Methoden `select` und `deselect` lassen sich einzelne Elemente selektieren oder deselektieren:

    public void select(int index)

    public void deselect(int index)
| java.awt.List

Im Gegensatz zu `Choice` ist es bei einer Komponente des Typs `List` auch möglich, Elemente zu entfernen oder ihren Wert zu ändern:

    public void delItem(int index)

    public void remove(int index)

    public void replaceItem(String newValue, int index)
| java.awt.List

Sowohl `delItem` als auch `remove` löschen das Element an der Position `index`, und `replaceItem` ersetzt das Element an der Position `index` durch den neuen Wert `newValue`.

Eine `List` sendet sowohl Item-Ereignisse als auch Action-Ereignisse. Ein Action-Ereignis wird dann generiert, wenn ein Listenelement per Doppelklick ausgewählt wurde. Das Drücken der ENTER-Taste löst - wenigstens in der aktuellen Windows-Implementierung - kein Action-Ereignis aus. Ein Item-Ereignis wird ausgelöst, nachdem in der Liste ein Element ausgewählt wurde. Bezüglich der Implementierung von Event-Handlern für diese Ereignisse verweisen wir auf die Beschreibungen der Klassen `Choice` und `TextField` weiter oben.

|  |  |  | Falls ein Item-Ereignis ausgelöst wurde, verhält sich die Methode `getItemSelectable` des `ItemEvent` analog zu `Choice` und liefert das `List`-Objekt, das das Ereignis ausgelöst hat. Der Rückgabewert von `getItem` ist dagegen anders zu interpretieren, denn er liefert nicht das ausgewählte Element als `String`, sondern dessen Position als `Integer`-Objekt. Dieses kann mit `intValue` in ein `int` konvertiert werden, das die Position des ausgewählten Elements liefert. Beispielhafte Implementierungen von `actionPerformed` und `itemStateChanged` könnten folgendermaßen aussehen: |  |
Warnung

    001 /* List2.inc */
    002
    003 public void itemStateChanged(ItemEvent event)
    004 {
    005   List list = (List) event.getItemSelectable();
    006   String str1 = list.getSelectedItem();
    007   int pos = ((Integer) event.getItem()).intValue();
    008   System.out.println("list.getSelectedItem: " + str1);
    009   System.out.println("event.getItem:        " + pos);
    010 }
    011
    012 public void actionPerformed(ActionEvent event)
    013 {
    014    Object obj = event.getSource();
    015    if (obj instanceof List) {
    016       System.out.println("ListAction: "+event.getActionCommand());
    017    } else if (obj instanceof Button) {
    018       if (event.getActionCommand().equals("Ende")) {
    019          endDialog();
    020       }
    021    }
    022 }
| List2.inc

Listing 32.13: Behandlung der Ereignisse einer List-Komponente

Das Beispielprogramm für die Verwendung der `List`-Komponente sieht so aus:

    001 /* List1.inc */
    002
    003 private void customizeLayout(Panel panel)
    004 {
    005   panel.setLayout(new FlowLayout(FlowLayout.LEFT));
    006   List list = new List(6,false);
    007   list.addActionListener(this);
    008   list.addItemListener(this);
    009   list.add("Äpfel");
    010   list.add("Birnen");
    011   list.add("Bananen");
    012   list.add("Pfirsiche");
    013   list.add("Kirschen");
    014   list.add("Kiwis");
    015   list.add("Ananas");
    016   list.add("Erdbeeren");
    017   list.add("Blaubeeren");
    018   list.add("Mandarinen");
    019   panel.add(list);
    020   list.select(1);
    021 }
| List1.inc

Listing 32.14: Verwendung einer List-Komponente

Abbildung 32.9: Ein Dialog mit einer Listbox

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