15.22 List-Boxen
Eine AWT-List-Box ist ein Exemplar der Klasse java.awt.List. Das List-Objekt verwaltet nur Strings, stellt einen Ausschnitt dar und lässt einfache oder mehrfache Auswahl zu. Ein String, der angewählt wird, wird zum selektierten Element. Die JList-Komponente unter Swing weist größere Unterschiede zum AWT-Original auf als andere Swing-Komponenten. Das liegt an ihrem Modell, welches die Daten speichert - eine add()-Methode zum Hinzufügen von Einträgen ist der JList fremd. Daten lassen sich jedoch einfach in einem String-Array oder Vector über den Konstruktor übergeben. Intern verwaltet dann die Liste ein Modell, welches die Daten annimmt.
Hinweis Eine JList bietet im Gegensatz zur AWT-Liste keine Scroll-Möglichkeit. Enthält eine JList mehr Zeilen als auf dem Bildschirm sichtbar sind, dann muss die JList in ein JScrollPane eingebettet werden. Gleiches gilt auch für ein JTextArea-Objekt.
|
Bei der Auswahl eines Eintrags löst die AWT-Komponente List ein ItemEvent aus und beim Doppelklick zusätzlich ein ActionEvent. Die JList dagegen reagiert auf Ereignisse über ein ListSelectionListener.
Beispiel Erzeuge mit einem Standardmodell eine JList mit einigen Zeichenketten:
String listData[] = {
"Shinguz", "Glapum'tianer", "Suffus", "Zypanon", "Tschung" };
JList jlist = new JList( listData );
|
Hier klicken, um das Bild zu Vergrößern
Abbildung 15.21 Eine Swing-List-Box ohne Schieberegler
Listing 15.29 JListDemo.java
import javax.swing.*;
import javax.swing.event.*;
public class JListDemo
{
public static void main( String args[] )
{
JFrame frame = new JFrame( "Hitliste der Raubkopierer" );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
final String data[] =
{
"Vietnam, 99%",
"El Salvador, 97%",
"China, 96%",
"Slowenien, 96%",
"Russland, 94%",
"Deutschland, 42%",
"Australien, 35%",
"USA, 26%",
"Ende"
};
JList l = new JList( data );
l.addListSelectionListener( new ListSelectionListener() {
public void valueChanged( ListSelectionEvent e ) {
System.out.println( e );
if ( data[e.getLastIndex()].equals("Ende") )
System.exit(0);
}
} );
frame.getContentPane().add( l );
frame.pack();
frame.show();
}
}
class javax.swing.JList
extends JComponent
implements Scrollable, Accessible
|
|
JList()
Erzeugt eine neue List-Box. Einträge sind keine vorhanden. Die List-Box besitzt eine sichtbare Zeile. Mehrfachselektion ist nicht gestattet. |
|
JList( Object listData[] ), JList( Vector listData )
Erzeugt eine Liste mit Daten, die aus dem Feld oder dem Vektor kommen. |
|
JList( ListModel dataModel )
Erzeugt die Liste mit einem spezifischen Modell. |
Da das Modell die Daten beinhaltet, fehlen der JList-Komponente die Modifikationsfunktionen. Stattdessen lassen sich die Daten zum Beispiel dem Vector hinzufügen, was dann die JList automatisch zu einem Update veranlasst. Der Komponente sind viel mehr Methoden gegeben, die die Selektion zum Thema haben.
|
void clearSelection()
Löscht vorgenommene Selektionen. |
|
int getSelectedIndex()
Liefert die Position des selektierten Eintrags und -1, wenn kein Element gewählt wurde. |
|
int[] getSelectedIndices()
Liefert die Positionen aller selektierten Einträge. |
|
Object getSelectedValue()
Liefert den gewählten Wert oder null. |
|
Object[] getSelectedValues()
Liefert alle gewählten Werte. |
|
void setSelectionMode( int selectionMode )
Setzt den Selektionsmodus. Der Parameter kann die Werte ListSelectionModel.SINGLE_SELECTION (nur ein Eintrag), SINGLE_INTERVAL_SELECTION (mehrere Werte, aber in einem Intervall) oder, der Standard, MULTIPLE_INTERVAL_SELECTION (beliebige Anzahl von Selektionen) annehmen. |
|
int getSelectionMode()
Liefert den Selektionsmodus. |
|
void ensureIndexIsVisible( int index )
Bewegt die Liste in einem Ausschnitt, so dass der Eintrag an der Stelle index sichtbar ist. |
|
void addListSelectionListener( ListSelectionListener listener )
Fügt einen Listener hinzu. |
|
void removeListSelectionListener( ListSelectionListener listener )
Entfernt den Listener. |
Obwohl viele Listener von java.awt.event unter Swing wieder verwendet werden, ist die ListSelection neu. Daher muss auch in der import-Anweisung javax.swing.event eingebunden werden.
|