2012-01-05 18 views
6

私がStringオブジェクトのハッシュテーブルのエントリが含まれていJListの作成したい:StringとObjectのHashtableのエントリを含むJListを作成するにはどうすればよいですか?

Hashtable<String,Object> 

JListの要素はハッシュテーブルのエントリが含まれている文字列であるエントリキーの値を表示する必要がありますが...

可能ですか?どのようにそれを行うことができますか?

+0

また、 'Hashtable'に優先して' Map'実装を考えてみましょう。 – trashgod

+0

古いAPIを扱わなければならないので、ハッシュテーブルを使用する必要があります。 – aleroot

+0

キーでソートされたリストが必要ですか? – trashgod

答えて

5

AbstractListModelを拡張してListModelインターフェイスを実装します。派生モデルを使用してJListを作成します。​​も参照してください。

+0

'Map'インターフェイスにコーディングすることで、' SortedMap'のような代替実装を選択する余地が広がります。 – trashgod

+1

+1しかし...これは@dogbaneと私の解決策よりも多くの作業です。ただし、Hashtableが時間の経過とともに変更され、JListを動的に更新する必要がある場合は、これが方法です。 – user949300

+1

はい、JListはユーザーが操作できるので変更されるため、これが方法です。私は、ソリューションを行う仕事が少なくなることを期待していたので尋ねましたが、残念ながらそうではありませんでした。助けてくれてありがとう。私はHastTable ListModelを実装します;)。 – aleroot

3

ListModelインターフェイスを実装して、任意の操作を行うことができます。そのクラスを実装し、目的のHashMapを保持するクラスを作成します。 getElementAtメソッドの実装には特に注意してください。

5

は、データのためのあなたのHashtableのキーセットを使用して、あなたのJList

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

また、呼び出すことができます。あなたが代わりにHashMapを使用することを検討する必要がありますので

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

私はこの解決法の単純さが好きです。しかし、keySetの順序はかなりランダムであるため、JList内の項目の順序は@alerootが期待するものではないことに注意してください。 – user949300

5

Hashtableのは、 "古い" です。

値を呼び出すことによって、Hashtableのすべての値のコレクションを取得できます。 OOPS - あなたの質問を誤読しました。それをkeySet()に変更してください。 toString()メソッド(たとえばStringなど)を使用してJListに表示することに満足している場合は、すべてをJListに追加してください。残念なことに、少なくともJ6では、JListのコンストラクタはコレクションを取得しません(私のペットピーブ - 何年ものコレクションが???の周りにあります)ので、そこで少し仕事をしなければなりません。

警告あり。 HashtableとHashMapは、予測できない方法でエントリを並べ替えます。したがって、JListの値の順序は、あなたが望む順序ではないでしょう。より合理的な順序付けを維持するために、LinkedHashMapまたはTreeMapの使用を検討してください。

関連する問題