【问题标题】:TableModel vs ColumnModel: who owns the column value?TableModel vs ColumnModel:谁拥有列值?
【发布时间】:2011-04-11 09:36:19
【问题描述】:

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

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

【问题讨论】:

    标签: java swing jtable


    【解决方案1】:

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

    似乎没有人能保证两者保持同步。例如,JTable.getColumnName() 将返回 TableModel 列名,而不管 TableColumnModel 在屏幕上实际显示的内容。

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

    总结:TableColumnModel 是列值的最终所有者。 TableColumnModel 仅在尚无值时才向 TableModel 询问值。例如,如果您将列传递到 JTable.addColumn() 而不指定标题值。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 2015-10-31
    • 2015-01-22
    • 2011-08-10
    • 1970-01-01
    相关资源
    最近更新 更多