2013-02-13 158 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