2013-02-13 262 views
0

所以情況是我有一個JTable與一些JComboBox的單元格。在選擇JComboBox的元素時,需要改變表模型的結構。我還有一個'輸出表',它監聽JComboBox的選擇並相應地進行重新驗證,因此,我需要保持查詢表的模型相同,以便它可以重用偵聽器。我怎樣才能改變表模型的結構?更改TableModel結構

DefaultTableModel QueryTableModel = new DefaultTableModel(dropDownUserSelection, resultsListHeadings);  
queryTable.setModel(QueryTableModel); 

JComboBox box = new JComboBox(boxModel);  
queryTable.getColumnModel().getColumn(i).setCellEditor(new DefaultCellEditor(box)); 

我道歉,如果我問它已經在別處問一個問題,但我周圍有一捅,但沒有找到什麼,我一直在尋找。

感謝

+0

這有點不清楚。按結構,我假設你想添加/刪除列? – MadProgrammer 2013-02-13 23:46:47

+0

嗨,感謝您的回覆......是的,這是正確的。 – 2013-02-13 23:50:28

+1

請編輯您的問題,以包含顯示您的組合的[sscce](http://sscce.org/),[示例](http://stackoverflow.com/a/7356518/230513)和您的電話' fireTableStructureChanged()'。 – trashgod 2013-02-13 23:58:24

回答

2

TableModel有改變模型的通知父表(或任何人聽)的責任。

可用的一般事件是數據更改,單元更新,行插入/刪除和結構更改。

「結構更改」告訴父表,表模型的結構(列數和/或列名稱和/或類型的數量已更改)並且應該完全更新自身。

有很多方法可以實現這一點。您可以讓現有的表格模型相應地自行更改併發出「結構更改」事件,或者可以構建新的表格模型並將其應用於JTable,具體取決於您的需要。

+1

+1'setModel()',看到[here](http://stackoverflow.com/a/8260663/230513),也觸發了所需的事件。 – trashgod 2013-02-14 00:02:22

+0

+1不錯,你現在超過了40K的代表:) – 2013-02-14 00:26:16

+0

@ Eng.Fouad今天40,今天40 ...我覺得這麼老了;) – MadProgrammer 2013-02-14 00:35:12