JList und ListSelectionListener wird mehrfach ausgeführt

benurb

Mitglied
Hi,

Ich bin gerade dabei ein Programm mit einer JList als Auflistung zu erstellen. Über ein Eingabefenster werden dabei Einträge in eine Liste hinzugefügt und daraufhin die JList mit dieser Funktion aktualisiert:

Code:
DefaultListModel dlmMovie = new DefaultListModel();
for(int i = 0; i < lstWant.size(); i++) {
dlmMovie.addElement(lstWant.get(i).getMovieName());
}

jlstWant.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jlstWant.setModel(dlmMovie);
jlstWant.setBounds(5, lblWant.getLocation().y + lblWant.getHeight() + 2, (frame.getWidth() / 2) - 10, btnWant.getLocation().y - (lblWant.getLocation().y + lblWant.getHeight() + 5));

ListSelectionModel listSelectionModel;
listSelectionModel = jlstWant.getSelectionModel();
listSelectionModel.addListSelectionListener(new SharedListSelectionHandler());

p.add(jlstWant);

jlstWant ist dabei die JList
und lstWant ist die Liste aus der die Daten kommen (enthält eine selbst erstellte Klasse Movie).
Nun meine erste Frage: Kann man die JList auch einfacher aktualisieren?
Zweite Frage: Der ListSelectionListener wird bei diesem Code leider mehrfach ausgeführt. Was mache ich falsch?

Mein List Selection Listener sieht folgendermaßen aus:
Code:
class SharedListSelectionHandler implements ListSelectionListener {
publicvoid valueChanged(ListSelectionEvent e) { 
ListSelectionModel lsm = (ListSelectionModel)e.getSource();

System.out.println(lsm.getMinSelectionIndex());
}

Ausgabe:
0
0
0
0
1
1
1
1
usw.

Danke im Voraus
Benni
 
Zuletzt bearbeitet:
Hallo,
zu Deiner 2. Frage:

Java:
class SharedListSelectionHandler implements ListSelectionListener {
		public void valueChanged(ListSelectionEvent e) {
			if (!e.getValueIsAdjusting()) {
				ListSelectionModel lsm = (ListSelectionModel) e.getSource();

				System.out.println(lsm.getMinSelectionIndex());
			}
		}
	}

Mit der getValueIsAdjusting()-Abfrage werden "überflüssige" Events nicht verarbeitet. Siehe: http://java.sun.com/docs/books/tutorial/uiswing/components/list.html
 
Ah danke :)
Und für das andere habe ich eine Lösung gefunden. Ich hab immer mehr Listen erstellt und je mehr Elemente drin waren desto mehr Events wurden ausgeführt :D
 
Zurück