我有三个不同的表结构,每个表结构都在JScrollPane
中。每个表都使用单独的行标题实现,这些行标题不会水平滚动(非常类似于它的完成方式chown(2)
)。在链接中,我编写了两个自定义TableColumnModels
,删除第一行或除第一行之外的所有行。一个JTable
仅包含行标题列,另一个TableModel
包含相同的autocreateColumnsFromModel
。但是,我正在努力使用createDefaultColumnsFromModel()
标志和相应的方法AbstractTableModel.fireTableStructureChanged()
。当我向表中添加一个新条目时(在我的GUI中通过单击一个调用该功能的按钮),其他表必须更新(因此,createDefaultColumnsFromModel()
被调用)。我现在的问题是,随着表的重建,行标题列将作为常规列重新添加到表中(因为在我看来,TableModel
仅使用TableColumnModels
重建表。忽略要删除哪一列的TableColumns
约束以及要使用哪一列。
我确实发现here有趣的是谈到了这个问题,说明了
这要求您自己管理主表的TableColumns,否则JTable会将标题列重新引入主表
...,这正是我发生的事情。这是什么意思,我自己管理主表的TableColumnModel
?如何使用{{1}}重建表结构,该{{1}}将处理表中显示的列?
答案 0 :(得分:0)
问题不在fireTableStructureChanged()
方法或createDefaultColumnsFromModel()
范围内。但是TableColumnModel
,其addColumn()
方法特定于rowHeaderTable和mainTable(请参阅this implementation)需要重新实例化。那是因为检查是否只有第一列或只有第一列的所有内容应该被添加到表中的标志需要重置。
使用此新tableColumnModel
,可以调用createDefaultColumnsFromModel()
并成功更新表。