java - TableModel 与 ColumnModel : who owns the column value?

标签 java swing jtable

JTable.getModel().getColumnName()JTable.getColumnModel().getColumn(index).getHeaderValue() 有什么区别?两者似乎没有共享任何数据。我的猜测是 TableModel.getColumnName() 指示列的文本表示,而 TableColumn.getHeaderValue()TableColumn.getHeaderRenderer() 确定列的外观(不需要是纯文本)。

什么保证两者保持同步?如果两者发生冲突会怎样?

最佳答案

如果 JTableTableModel 构成但没有 TableColumnModel JTable将创建一个 TableColumnModel使用 createDefaultColumnModel()并设置 autoCreateColumnsFromModel为真。当此属性为真时,JTable将填充 TableColumnModel来自 TableModel 的值.

似乎没有人能保证两者保持同步。举个例子,JTable.getColumnName()将返回 TableModel列名不管TableColumnModel是什么实际显示在屏幕上。

我注意到的另一个有趣的事情是 TableModel仅限于字符串列,而 TableColumnModel允许您将任何对象传递给 TableCellRenderer . Javadoc says这些值仅限于字符串,但实际上这是特定于实现的。没有什么能阻止您编写使用 JComponent 的实现值(value)。

总结:TableColumnModel是列值的最终所有者。 TableColumnModel只问TableModel仅当它还没有值时才使用值。例如,在将列传递到 JTable.addColumn() 的情况下不指定 header 值。

关于java - TableModel 与 ColumnModel : who owns the column value?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3696112/

相关文章:

java - 访问 Spring WebDataBinder 的 BindingResult 而不放入参数列表

java - 将标题栏添加到 JFrame (Linux)

java - JToolBar 中的 JSeperator 将组件移动到右端

java - 使用 MVC 架构填充 GUI 中的表

java - JTable 中的数据分页

当我单击 JTable 问题中的 JComboBox 时,出现 java.awt.IllegalComponentStateException

java - iOS - JAVA 实现实时数据同步的最佳方法

java - 如何部分覆盖 OOTB 组件的 osgi 配置?

java - 在JTable中显示来自mysql的数据

java - Java 中的 CardLayout 通过 'cards' 之一中的操作更改