2009-06-04 7 views

Antwort

1

Sie könnten auch die setListData(Vector) Methode verwenden:

jList1.setListData(new Vector<String>(map.keySet())); 

Mit jedem der setListData Methoden, Sie machen eine Kopie der aktuellen Daten, so dass Änderungen an der Karte wird in der Liste nicht berücksichtigt werden. Sie könnten stattdessen eine benutzerdefinierte ListModel erstellen und diese stattdessen an die setModel-Methode übergeben, aber da es keine Möglichkeit gibt, auf ein beliebiges Element einer per Index zuzugreifen, ist dies wahrscheinlich nicht möglich.

0

So gefunden, um es zu tun, nachdem ich die Frage beantwortet hatte, dachte ich, ich würde es hier für die Gemeinschaft aufstellen. Ich denke, dass dies der effizienteste Weg ist, um es zu schaffen, aber ich bin sicherlich offen für weitere Vorschläge.

jList1.setListData(LinkedHashMap.keySet().toArray()); 
+0

Solange Sie nicht erwarten, dass die JList aktualisiert wird, wenn Sie etwas zur Karte hinzufügen, funktioniert dies. –

+1

Sie können auch die setListData (Vector) -Methode verwenden: jList1.setListData (new Vector (map.keySet())); –

+0

danke mmyers Ich denke, ich werde stattdessen so verwenden. –

1

Wenn der JList nicht empfindlich auf Änderungen der ursprünglichen Karte ist, können Sie die ursprüngliche Methode verwendet wird, ist in Ordnung (besser als Vektor verwendet, der die zusätzliche Schicht von Synchronisations hat).

Wenn Sie jList ändern möchten, wenn sich die Karte ändert, müssen Sie Ihr eigenes ListModel schreiben (was nicht so schwer ist). Sie müssen auch herausfinden, wie Sie wissen, wann sich die Karte ändert.

+0

Was meinst du mit der ursprünglichen Methode ist "besser als mit Vektor?" Ich bin nur Neugierig. –

+0

Die Vector-Klasse hat alle Methoden synchronisiert. Dies fügt jedem Anruf geringe Kosten hinzu. Es ist kein großer Unterschied, aber da die andere Technik ungefähr so ​​einfach ist, empfehle ich es über Vektoren. –

Verwandte Themen