2012-05-14 16 views
0

我試圖讓從存儲在與包含HashMap的ArrayList一個數據一個JTable負載。該代碼看起來像數據負載的JTable從ArrayList中<HashMap>

private ArrayList<HashMap> menuLijst; 
private JPanel tablePanel; 
//some init 
tablePanel = new JPanel(); 

那麼,這是一些隨機數據,只是爲了確保它的工作原理。

this.menuList = new ArrayList(); 
// hashmap 
HashMap hm1 = new HashMap(); 
HashMap hm2 = new HashMap(); 
hm1.put("question", "Contact"); 
hm1.put("query", "select contact from tim"); 
hm1.put("message", "contact"); 
hm2.put("question", "Sales"); 
hm2.put("query", "select sales from tim"); 
hm2.put("message", "sales"); 
menuList.add(hm1); 
menuList.add(hm2);  

所以這是我的HashMap的樣子,這是一種多餘的就知道了,因爲JTabel不依賴於預先定義大小的數據。

總之,我的問題是,如何把數據從使用的ArrayList在JTable包含HashMap。

我嘗試過的一些選項,但它沒有工作,因爲它應該是。

在此先感謝。

+0

儘量選用Dacwe的評論,但在此期間,他刪除了它。 –

回答

1

您可以創建自己的TableModel實現(或從其中一個可用類擴展),也可以使用其他數據結構(請參閱可用構造函數DefaultTableModel)。

但是,只要您找到一種機制將列順序確定爲HashMap作爲無順序,創建您的TableModel就會非常簡單直觀。

Swing table tutorial包含有關創建TableModel實例

+0

感謝您的幫助。 –

0

JTable使用JavaBeans的概念,並且如JavaBeans屬性散列映射鍵/值對未實現。我將使用一對類或定義您自己的具有鍵/值屬性的pair類

1

只需延伸AbstractTableModel和實現以下方法的截面:

  • getColumnCount
  • getRowCount
  • getValueAt
  • getColumnName

選擇列(例如查詢則消息)的出場順序,並使用

HashMap map = menuLijst.get(row); 
if (col==0) 
    return map.get("query"); 
else if (col==1) 
    return map.get("message"); 

實施getValueAt(int row, int col)

+0

感謝您的幫助,但我採取了另一種方式。但還是謝謝 –