Wie ermittelt man einen Eintrag in eine JList?
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.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class ListenElementErmitteln implements ListSelectionListener {
JList<String> liste;
public ListenElementErmitteln() {
DefaultListModel<String> model = new DefaultListModel<String>();
model.addElement("eins");
model.addElement("zwei");
model.addElement("drei");
liste = new JList<String>(model);
liste.addListSelectionListener(this);
JScrollPane sp = new JScrollPane(liste);
JFrame frame = new JFrame("Listenelement ermitteln");
frame.getContentPane().add(sp, BorderLayout.CENTER);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocation(200, 200);
frame.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) {
SwingUtilities.invokeLater(() -> new ListenElementErmitteln());
}
}
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.