java用独立的行标题表在表体系结构中重建JTable结构
我有三种不同的表结构,每一种都在JScrollPane
中。每个表都使用单独的行标题来实现,这些行标题不会水平滚动(非常类似于here)。正如在链接中一样,我编写了两个自定义TableColumnModels
,它们要么删除第一行,要么删除除第一行以外的所有行。一个JTable
只包含行标题列,另一个包含剩余数据的TableModel
共享相同的数据。然而,我正在努力处理autocreateColumnsFromModel
标志和相应的方法createDefaultColumnsFromModel()
。当我向表中添加一个新条目时(在我的GUI中,通过单击一个包含该功能的按钮),必须更新其他表(因此,调用AbstractTableModel.fireTableStructureChanged()
)。我现在的问题是,在重建表时,行标题列会作为常规列重新添加到表中(因为在我看来,createDefaultColumnsFromModel()
只使用TableModel
重建表,而忽略TableColumnModels
要删除的列和要使用的列的约束)
我确实觉得this article有趣的是,正是关于这个问题的讨论
This requires that you manage the TableColumns of the main table on your own, otherwise JTable will re-introduce the header column into the main table
。。。,这正是发生在我身上的事情。但是,这意味着什么,要自己管理主表的TableColumns
?如何通过使用TableColumnModel
来重建表结构,它将负责在表中显示哪些列
# 1 楼答案
问题不在于
fireTableStructureChanged()
方法或createDefaultColumnsFromModel()
方法。但是TableColumnModel
需要重新实例化,因为它的addColumn()
方法特定于rowHeaderTable和mainTable(请参见this implementation)。这是因为检查是否只应将第一列或除第一列以外的所有内容添加到表中的标志需要重置。 使用这个新的tableColumnModel
,可以调用createDefaultColumnsFromModel()
,并成功更新表