【发布时间】:2012-04-17 14:45:55
【问题描述】:
所以我正在使用JTable,它与我自己的自定义数据模型相关联。这一切都是功能性的,但我遇到的问题是,任何时候我对表进行更改(触发 tableDataChanged、tableStructureChanged 等)所有列宽都会自行重置为默认值。我从研究中了解到,这与默认分配的TableColumnModel 有关。在此重置之外,我对 DefaultTableColumnModel 的功能感到满意,但如果用户应该调整列的大小(通过拖动列标题的边缘),我只想保留列的宽度。
我知道 TableColumns 的 setPreferredWidth(),并且我已经能够成功地做到这一点;我想我的问题是我应该听什么样的事件来保存和设置这个首选宽度。我尝试将PropertyChangeListener 添加到表头,但是每当我尝试调整大小时,我都会得到一个 StackOverflow(我假设它是递归运行的)。我完全可以在数据模型中为列宽添加一个额外的数据成员并将其存储在那里,但我只是不知道何时/如何设置这些宽度,以便它们不会被@987654326 覆盖@等事件。想法?
【问题讨论】:
-
在关闭进程之前,读取列宽并将它们保存到属性文件中。当您打开您的进程时,请阅读属性文件,如果存在,请设置列宽。您可能需要扩展 DefaultTableColumnModel 以便控制列宽。
-
它实际上在任何调用 fireTableStructureChanged() 时都会这样做,而不仅仅是在程序开始时,所以如果我在数据模型中添加或删除列(它必须重新生成列)它确实这个。我试过覆盖
fireTableStructureChanged()来手动设置列宽,但它似乎没有效果。我想我只是不确定这个列生成的确切位置以及覆盖它的位置。 -
我一直在做数据驱动的列宽。如果我找到任何东西,我会提供答案。
-
哦,好的,谢谢。是的,我是 JTables 的新手,所以我边走边学。