将HashTable / Map绑定到Jtable

时间:2013-04-05 09:28:36

标签: java swing jtable hashmap

我有一个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“files”中“Files”类中的变量。

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

2 个答案:

答案 0 :(得分:1)

创建一个从基类AbstractTableModel扩展的tableModel。在这里,你必须覆盖适当的方法(你的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的参数,你应该没问题。

答案 1 :(得分:0)

您可以使用keys方法获取HashMap的{​​{1}}。

这将返回您HashMap.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}); } 方法&amp; 不可变用作equals()密钥。

覆盖HashMap将避免在Hash collision之后覆盖密钥,并且使不可变类不会使与孤立密钥相关联的值(因为密钥一旦创建就不会改变)

因此,如果您认为equals()类不可变会破坏其目的,建议您使用HashMap<String, Files>而不是HashMap<Files,String>