JTable.getModel().getColumnName()
和 JTable.getColumnModel().getColumn(index).getHeaderValue()
有什么区别?两者似乎没有共享任何数据。我的猜测是 TableModel.getColumnName()
指示列的文本表示,而 TableColumn.getHeaderValue()
和 TableColumn.getHeaderRenderer()
确定列的外观(不需要是纯文本)。
什么保证两者保持同步?如果两者发生冲突会怎样?
最佳答案
如果 JTable由 TableModel 构成但没有 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/