1

私は C# の経験があり、Java は初めてです。Java を使用して Windows アプリケーションを Mac に移植しようとしています。

私が抱えている問題は、キーの変数が JTable に表示されるように、クラスを含む HashTable を JTable にバインドする方法です。C# WPF では、GridView.ItemSource を dictionary.keys にバインドするだけで、非常に簡単です。しかし、Java ではもっと複雑に見えます。これが私がこれまでに持っているものです:

Map<Files, String> files = new HashMap<Files,String>();

public class Files {
       public Files(String files, String duration, String status) {}
                   }

public void AddFiles(String addfile, String addduration, String addstatus, String path){
            files.put(new Files(
                    addfile, addduration, addstatus), 
                    path);
            }

C# では、クラスは少し異なるように見えますが、GridView.Itemsource = files.Keys を実行するだけで、すべてが完全に表示されます。Javaで同様のことを達成するにはどうすればよいですか?

JTable は多次元配列を使用して値をロードできることを知っているので、現在 HashTable の値をロードしてObject[][] tableData使用しようとしています:

String[] columnNames = {"File","Duration", "Status"};
final JTable table = new JTable(tableData, columnNames);

問題は、HashMap「ファイル」内のクラス「ファイル」内の変数にアクセスする方法がわからないことです。

あることは知っ.getKey().getClass()ていますが、HashMap 内のクラス「Files」の値を含む多次元配列をまだロードできていません。

4

2 に答える 2

0

usingメソッドkeysのを取得できます。HashMapHashMap.keySet()

これSetにより、 に保存したキー オブジェクトの が返されますHashMap

HashMap<Files, String> yourHashMap = new HashMap<Files, String>();
Set<Files> keys = yourHashMap.keySet();

DefaultTableModelセットを取得したら、そのセットを に持っていると仮定して、次のJTableことができます。

for(Files f : keys) {
   yourDefaultTableModel.addRow(new String[]{f.files, f.duration, f.status});
}

ノート:

キーとして使用するために不変であるメソッド & をオーバーライドするクラスを使用することを常にお勧めします。equals()HashMap

オーバーライドすると、ハッシュ衝突equals()の場合にキーが上書きされるのを回避できます。また、クラスを不変にしても、キーに関連付けられた値が孤児になることはありません (作成されたキーは変更されないため)。

したがって、クラスを不変にするとその目的が損なわれると思われる場合は、HashMap<String, Files>代わりに使用することをお勧めします。HashMap<Files,String>Files

于 2013-04-05T10:04:33.543 に答える