How can I create a JList that contains entries of a Hashtable of String and Object?
Asked Answered
F

4

6

I want to create a JList that contains entries of a Hashtable of String and object :

Hashtable<String,Object>

the JList element should contain the hashtable entry and display the value of the entry key that is a string ...

Is it possible ? How can it be done ?

Fula answered 5/1, 2012 at 18:7 Comment(4)
Also consider a Map implementation in preference to Hashtable.Isabeau
I can't, i have to use an hashtable because i have to deal with an old API..Fula
Do you need the list sorted by key?Isabeau
No, it is not important, but could be nice :)Fula
I
5

Implement the ListModel interface by extending AbstractListModel. Use the derived model to create your JList. See also How to Use Lists.

Isabeau answered 5/1, 2012 at 18:13 Comment(4)
By coding to the Map interface, one has more latitude to select an alternate implementation, such as SortedMap.Isabeau
+1 but... This is more work than @dogbane and my solution. However, if the Hashtable is going to change over time and you need to dynamically update the JList, this is the way to go.Hinckley
Yes, the JList is going to change because the user can interact with it, so this is the way to go. I asked because i was hoping that there was a less work to do solution, but unfortunately not . Thanks to all for the help. I will implement an HastTable ListModel ;) .Fula
See also this example that builds a TableModel around Map<String, String>.Isabeau
Z
5

Use the keyset of your Hashtable for the data in your JList:

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

You can also call:

list.setListData(table.keySet().toArray())
Zest answered 5/1, 2012 at 18:17 Comment(1)
I like the simplicity of this solution. But be warned that the order of the keySet will be pretty random, so the order of items in the JList will not be what @Fula expects.Hinckley
H
5

Hashtable is "old", so you should consider using a HashMap instead.

You can get a Collection of all the values in the Hashtable by calling values(). OOPS - I misread your question, change that to keySet(). If you are happy with displaying them in the JList using their toString() method (e.g., they are Strings), just add them all to the JList. Unfortunately, the JList constructors, at least in J6, do not take Collections (pet peeve of mine - how many years have Collections been around???), so you'll have to do a little work there.

One warning. Hashtable and HashMap order their entries in a pretty unpredictable manner. So the order of the values in the JList will almost certainly not be the order you want. Consider using a LinkedHashMap or a TreeMap to maintain a more reasonable ordering.

Hinckley answered 5/1, 2012 at 18:18 Comment(0)
L
3

You can implement the ListModel interface to do anything you want. Create a class that implements it and holds onto your desired HashMap. Pay particular attention to the getElementAt method implementation.

Livelihood answered 5/1, 2012 at 18:15 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.