2013-04-05 75 views
1

我有一個C#背景,我對Java很新。嘗試使用Java將我的Windows應用程序移植到Mac。將HashTable/Map綁定到Jtable

我遇到的問題是如何將包含類的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中可以使用一個多維數組裝載值,所以我現在想哈希表的值加載到Object[][] tableData然後用:

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

的問題是,我不t知道如何訪問HashMap「文件」中類「文件」中的變量。

我知道有:.getKey().getClass()但我仍然無法加載多維數組與HashMap中的類「文件」的值。

+1

你想在HashMap中獲得Keys? – sanbhat 2013-04-05 09:33:02

回答

1

創建一個從基類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的參數,你應該沒問題。

+0

你能更清楚一點嗎?你的意思是用我的數據作爲參數調用模型?我什麼時候可以打電話? – Omid 2013-04-05 20:08:02

+0

當您創建JTable時,將其模型(您在其他地方定義的)作爲參數傳遞給它。 – 2013-04-07 10:48:55

0

您可以使用HashMap.keySet()方法獲得HashMapkeys

這將返回您存儲在您的HashMap中的關鍵對象的Set

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 collision,並使一類不變不與關鍵孤兒(因爲密鑰不會一旦其創建的改變)

關聯的值所以我建議使用HashMap<String, Files>而不是HashMap<Files,String>,如果你覺得Files類不可改變的話打破它的目的。

相關問題