# Listenfeld

Ein Listenfeld (englisch listbox, auch Auswahlliste) ist ein Steuerelement (control, component) einer grafischen Benutzeroberfläche (GUI). Es dient zur Darstellung von durch den Benutzer auswählbaren Einträgen in Listenform. Bei den Einträgen handelt sich in der Regel um Daten textueller Natur, aber auch die Darstellung von Piktogrammen oder Kombinationen aus Text und Bild sind möglich.

## Arten von Listenfeldern

Es wird zwischen verschiedenen Arten von Listenfeldern unterschieden:
* Das normale Listenfeld ist mehrzeilig. Da sich in der Liste häufig mehr Einträge befinden, als das Feld Zeilen besitzt, dient eine vertikale Bildlaufleiste (scrollbar) zum Blättern (scrollen) innerhalb der Liste.
* Neben dem permanent sichtbaren mehrzeiligen Listenfeld existiert noch die platzsparende einzeilige Drop-Down Listbox (Dropdown-Listenfeld, Klappliste). Bei ihr zeigt sich die vollständige Liste erst beim Drücken der zugehörigen Schaltfläche in Form eines Menüs (Popup-Menü, Kontextmenü), das die Auswahl eines Eintrages gestattet.
* Die Kombination aus Listenfeld und einem Textfeld (Textfield oder Textbox) zur direkten Ein- und Ausgabe bezeichnet man als Kombinationsfeld (Combobox).
* Erweiterte Listenfelder mit Symbolen, Text und/oder mehreren Spalten, wie sie in Dateimanagern häufig zu finden sind, werden auch als Listenansicht (Listview) bezeichnet.
Welche Einträge – als Vorschläge zur Auswahl durch den Anwender – zu welchem Zeitpunkt im Listenfeld angezeigt werden, hängt dabei von der Programmierung der jeweiligen Anwendung ab. Von den Details der Implementierung des Listenfeldes in einem Computerprogramm hängt es auch ab, ob nur ein oder auch mehrere Einträge selektiert werden können. Bei einzeiligen Listenfeldern kann in der Regel nur ein Eintrag selektiert werden. In vielen Komponentenframeworks können die Einträge von mehrzeiligen Listenfeldern jeweils mit einem Kontrollkästchen versehen werden (CheckedListBox), um die Auswahl mehrerer Einträge zu erleichtern.

## Implementierungen
### Java

In der Programmiersprache Java gibt es abhängig vom verwendeten Komponentenframework unterschiedliche Klassen für Listenfelder.

#### AWT

In AWT wird das mehrzeilige Listenfeld durch die Klasse java.awt.List und das einzeilige Drop-Down-Listenfeld durch die Klasse java.awt.Choice repräsentiert.

#### Swing

In Swing wird das mehrzeilige Listenfeld durch die Klasse javax.swing.JList und das einzeilige Drop-Down-Listenfeld durch die Klasse javax.swing.JComboBox repräsentiert. Da es sich hierbei um ein Kombinationsfeld handelt, muss definiert werden, ob es nur zur Auswahl dienen soll oder auch Eingaben über das integrierte Textfeld annehmen soll ( setEditable(true) ).

#### JavaFX

Unter JavaFX können Listenfelder auf drei Arten realisiert werden:
* Einzeilige Drop-Down-Listenfelder werden als Kombinationsfeld über die Klasse ComboBox repräsentiert. Ähnlich wie bei Swing kann die textbasierte Änderung über die Methode setEditable ermöglicht oder verhindert werden.
* Mehrzeilige Listenfelder mit einer Spalte werden durch die Klasse ListView repräsentiert.
* Listen mit mehreren Spalten können als Rasteransicht mit der Klasse TableView realisiert werden.

### HTML

In der Auszeichnungssprache HTML gibt es zwei Arten von Auswahllisten.

#### Select-Element

Einfache Formularfelder werden bereits seit der ersten Version von HTML unterstützt. Dazu zählen auch einzeilige Drop-Down-Listen und mehrzeilige Listenfelder. Beide Repräsentationen werden durch das <select>-Element erzeugt:
* Fehlt das size-Attribut oder hat es einen Wert kleiner als 2, so wird ein einzeiliges Drop-Down-Listenfeld dargestellt:
<select size = "1">
* Wenn das size-Attribut den Wert 2 oder höher besitzt, wird ein mehrzeiliges Listenfeld dargestellt:
<select size = "2"> Standardmäßig kann in mehrzeiligen Listenfeldern immer nur ein Wert ausgewählt werden. Besitzt das <select>-Element allerdings das multiple-Attribut, so können beliebig viele Werte aus der Liste ausgewählt werden.
Die einzelnen Listeneinträge werden mit <option>-Elementen erzeugt. Ab HTML4 können diese mit Hilfe von <optgroup>-Elementen in Gruppen eingeteilt werden.
Das nachfolgende Beispiel zeigt, wie man in HTML ein einzeiliges Listenfeld mit Studiengängen erstellen kann.

#### Datenlisten für Eingabefelder

In HTML5 können Textfelder mit einer Datenliste kombiniert werden, um eine Autovervollständigung zu realisieren. Jedes <input>-Element vom Typ „email“, „number“, „search“, „tel“, „text“ oder „url“ kann mit Hilfe eines <datalist>-Elements mit einer Drop-Down-Liste versehen werden. Wie beim <select>-Element werden die Listeneinträge mit <option>-Elementen erzeugt. Bei großen Datenbeständen werden diese i. d. R bei Bedarf dynamisch via Ajax und JSON erzeugt.

### Visual Basic for Applications (Excel)

Das VBA-Beispiel überträgt die Daten aus einem Excel-Tabellenblatt in ein Listenfeld (Listbox). Es beschränkt sich auf drei Spalten, kann aber erweitert werden.
* Lade eine Excel-Datei (beispielsweise Adressen) oder erstelle eine solche Datei. Speichere die Datei unter dem Namen „mappe.xls“.
* Erstelle eine UserForm mit der Bezeichnung „UserForm1“ und ein Listenfeld mit der Bezeichnung „ListBox1“.
* Kopiere den folgenden Userform Code:

### Windows Forms (C#)

Das folgende ein wenig umfangreichere Beispiel in der Programmiersprache C# zeigt die Implementierung von 2 Listenfeldern. In das 1. Listenfeld werden Quadratzahlen eingetragen, in das 2. Listenfeld Dreieckszahlen. Das Auswahlereignis der Listenfelder wird jeweils mit einer Ereignisbehandlungsroutine verknüpft (siehe Ereignis). Wenn sich die Auswahl in den Listenfeldern ändert, wird die ausgewählte Quadratzahl mit der ausgewählten Dreieckszahl verglichen und eine entsprechende Meldung in einem Textfeld ausgegeben.