Das Beispiel zeigt eine einfache JList, der bei der Deklaration ein
Model vom Typ DefaultListModel mit drei String-Einträgen übergeben
wird. Die JList wird bei einem ListSelectionListener
angemeldet, dessen Methode valueChanged(ListSelectionEvent e) eine
Schleife enthält, die die Einträge des Models durchläuft. Die untere und
obere Grenze des Durchlaufs wird dabei durch Methoden ermittelt, die die
Klasse JList bereitstellt. Innerhalb der Schleife wird dann der
Index der Selektion registriert und der entsprechende Inhalt der
Modelposition ausgegeben.
An dieser Stelle ist eines bemerkenswert: Der
ListSelectionListener registriert bei der Auswahl eines
Listenelementes zwei Ereignisse, ein Mousedown- und ein Mouseup-Ereignis,
von denen nur das erste eine eventuelle Ändereung evoziert. Um
ausschließlich dieses Ereignis abzufangen, kann die Methode getValueIsAdjusting()
des ListSelectionEvent verwendet werden. Sie gibt einen boolschen
Wert zurück, der im Beispiel abgefragt wird.
import java.awt.BorderLayout;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class ListenElementErmitteln extends JFrame implements ListSelectionListener {
JList liste;
public ListenElementErmitteln() {
DefaultListModel model = new DefaultListModel();
model.addElement("eins");
model.addElement("zwei");
model.addElement("drei");
liste = new JList(model);
liste.addListSelectionListener(this);
JScrollPane sp = new JScrollPane(liste);
this.getContentPane().add(sp, BorderLayout.CENTER);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(300, 200);
this.setVisible(true);
}
public void valueChanged(ListSelectionEvent e) {
if (liste.isSelectionEmpty()) {
return;
}
int minIndex = liste.getMinSelectionIndex();
int maxIndex = liste.getMaxSelectionIndex();
for (int i = minIndex; i <= maxIndex; i++) {
if (liste.isSelectedIndex(i) && e.getValueIsAdjusting()) {
System.out.println(liste.getModel().getElementAt(i));
}
}
}
public static void main(String[] args) {
new ListenElementErmitteln();
}
}