1

我有 C# 背景,对 Java 还是很陌生。尝试使用 Java 将我的 Windows 应用程序移植到 Mac。

我遇到的问题是如何将包含类的 HashTable 绑定到 JTable,以便键中的变量显示在 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 和瞧,这一切都完美地显示了 upp。如何在 Java 中实现类似的功能?

我知道 JTable 可以使用多维数组来加载值,所以我现在正在尝试将 HashTable 的值加载到Object[][] tableData然后使用:

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

问题是我不知道如何访问 HashMap“文件”中的“文件”类中的变量。

我知道有:.getKey().getClass()但我仍然无法使用 HashMap 中的“文件”类的值加载多维数组。

4

2 回答 2

1

创建一个从基类扩展的 tableModel AbstractTableModel。在这里,您必须覆盖适当的方法(您的 IDE 会指出它们),最重要的是getValueAt().

以类似于以下的方式覆盖这个:

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
     switch (columnIndex) {
     case 0:
            return data.get(rowIndex).getValueX; // Change to however you'd like to call a single value from your map
     case 1:
            return data.get(rowIndex).getValueY;
     case 2:
            return data.get(rowIndex).getValueZ;
     default:
            throw new IndexOutOfBoundsException();
     }
}

您可以使用您的数据作为参数调用您的模型。之后,将此模型用作您的 JTable 的参数,您应该没问题。

于 2013-04-05T09:52:54.200 回答
0

你可以得到keys一个HashMapusingHashMap.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()将避免在Hash 冲突的情况下覆盖键,并且使类不可变不会使与键关联的值成为孤儿(因为键一旦创建就不会更改)

因此,如果您觉得使类不可变会破坏其目的,我建议您使用HashMap<String, Files>而不是。HashMap<Files,String>Files

于 2013-04-05T10:04:33.543 回答