2012-01-05 9 views
6

Chcę utworzyć JList, który zawiera wpisy hashtable z ciągiem i obiekt:Jak utworzyć listę JList, która zawiera wpisy tabeli Hashtable ciągu i obiektu?

Hashtable<String,Object> 

element JList powinna zawierać Hashtable wjazdu i wyświetla wartość klucza wejściowego, który jest ciągiem ...

Czy to możliwe? Jak można to zrobić ?

+0

Należy również rozważyć wdrożenie 'Map' zamiast" Hashtable ". – trashgod

+0

Nie mogę, muszę użyć hashtable, ponieważ mam do czynienia ze starym API .. – aleroot

+0

Czy potrzebujesz listy posortowanej według klucza? – trashgod

Odpowiedz

5

Implementowanie interfejsu ListModel przez rozszerzenie AbstractListModel. Użyj modelu pochodnego, aby utworzyć swoją JList. Zobacz także How to Use Lists.

+0

Dzięki kodowaniu do interfejsu 'Map', użytkownik ma większą swobodę wyboru alternatywnej implementacji, takiej jak' SortedMap'. – trashgod

+1

+1, ale ... To więcej pracy niż @ tobbane i moje rozwiązanie. Jeśli jednak Hashtable będzie się zmieniać w czasie i trzeba dynamicznie aktualizować JList, to jest droga do zrobienia. – user949300

+1

Tak, lista JList ulegnie zmianie, ponieważ użytkownik może z nią współdziałać, więc jest to właściwa droga. Zapytałem, ponieważ miałem nadzieję, że jest mniej pracy do rozwiązania, ale niestety nie. Dziękuję wszystkim za pomoc. Wdrażam HastTable ListModel;). – aleroot

3

Możesz zaimplementować interfejs ListModel, aby zrobić cokolwiek chcesz. Utwórz klasę, która ją implementuje i przechowuje na pożądanej HashMap. Zwróć szczególną uwagę na implementację metody getElementAt.

5

Użyj zestaw kluczy twoich Hashtable dla danych w JList:

Hashtable<String, Object> table = new Hashtable<String, Object>(); 
JList list = new JList(table.keySet().toArray()); 

Można również zadzwonić:

list.setListData(table.keySet().toArray()) 
+1

Podoba mi się prostota tego rozwiązania. Ale pamiętaj, że kolejność zestawu kluczy będzie dość losowa, więc kolejność elementów w JList nie będzie tym, czego oczekuje @aleroot. – user949300

5

Hashtable jest "stary", więc należy rozważyć użycie HashMap zamiast .

Możesz uzyskać kolekcję wszystkich wartości w HashTable, wywołując wartości(). OOPS - źle odczytałem twoje pytanie, zmień to na keySet(). Jeśli jesteś zadowolony z wyświetlania ich w JList przy użyciu ich metody toString() (np. Są to łańcuchy), po prostu dodaj je wszystkie do listy JList. Niestety, konstruktorzy JList, przynajmniej w J6, nie biorą Kolekcji (moje domowe kolekcje - ile lat mają kolekcje w okolicy ???), więc będziesz musiał tam trochę popracować.

Jedno ostrzeżenie. Hashtable i HashMap porządkują swoje wpisy w dość nieprzewidywalny sposób. Tak więc kolejność wartości w liście JList prawie na pewno nie będzie taka, jakiej chcesz. Rozważ użycie obiektu LinkedHashMap lub TreeMap, aby zachować bardziej racjonalne porządkowanie.

Powiązane problemy