Java 使用单独的行标题表在表体系结构中重建JTable结构

Java 使用单独的行标题表在表体系结构中重建JTable结构,java,swing,scroll,jtable,Java,Swing,Scroll,Jtable,我有三种不同的表结构,每一种都在JScrollPane中。每个表都使用单独的行标题来实现,这些行标题不会水平滚动(非常类似于它的实现方式)。正如在链接中一样,我编写了两个自定义的TableColumnModels,它们要么删除第一行,要么删除除第一行以外的所有行。一个JTable仅包含行标题列,另一个包含其余数据的表共享相同的TableModel。但是,我正在努力使用autocreateColumnsFromModel标志和相应的方法createDefaultColumnsFromModel()

我有三种不同的表结构,每一种都在
JScrollPane
中。每个表都使用单独的行标题来实现,这些行标题不会水平滚动(非常类似于它的实现方式)。正如在链接中一样,我编写了两个自定义的
TableColumnModels
,它们要么删除第一行,要么删除除第一行以外的所有行。一个
JTable
仅包含行标题列,另一个包含其余数据的表共享相同的
TableModel
。但是,我正在努力使用
autocreateColumnsFromModel
标志和相应的方法
createDefaultColumnsFromModel()
。当我向一个表添加一个新条目时(在我的GUI中,通过单击一个包含该功能的按钮),其他表必须更新(因此,调用了
AbstractTableModel.fireTableStructureChanged()
)。我现在的问题是,在重建表时,行标题列作为常规列重新添加到表中(因为在我看来,
createDefaultColumnsFromModel()
仅使用
TableModel
重建表,并忽略要删除的列和要使用的列的
TableColumnModels
约束)

我确实觉得很有意思的是,我们谈论的正是这个问题

这要求您自己管理主表的TableColumns,否则JTable会将header列重新引入主表


…这正是发生在我身上的事。但是,这意味着什么,要自己管理主表的
TableColumns
?如何使用负责在表中显示哪些列的
TableColumnModel
重建表结构

问题不在
fireTableStructureChanged()
方法或
createDefaultColumnsFromModel()
中。但是
TableColumnModel
,其
addColumn()
方法特定于rowHeaderTable,需要重新实例化主表(请参阅)。这是因为检查是否只应将第一列或除第一列以外的所有内容添加到表中的标志需要重置。
使用此新的
tableColumnModel
,可以调用
createDefaultColumnsFromModel()
,并成功更新表

FireTableStructureChanged指示JTable列和数据已经更改,所有以前缓存的数据都应该被丢弃,这可能不是您真正想要的,也许rowInserted更合适问题在于它并不总是插入一行。有时它是一个需要在表中更新的列。