TableModel 与 ColumnModel:谁拥有列值?

2024-01-03

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

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


If a JTable http://download.oracle.com/javase/6/docs/api/javax/swing/JTable.html是用一个表模型 http://download.oracle.com/javase/6/docs/api/javax/swing/table/TableModel.html但没有表列模型 http://download.oracle.com/javase/6/docs/api/javax/swing/table/TableColumnModel.html the JTable http://download.oracle.com/javase/6/docs/api/javax/swing/JTable.html将创建一个表列模型 http://download.oracle.com/javase/6/docs/api/javax/swing/table/TableColumnModel.html using 创建默认列模型() http://download.oracle.com/javase/6/docs/api/javax/swing/JTable.html#createDefaultColumnModel%28%29并设置从模型自动创建列 http://download.oracle.com/javase/6/docs/api/javax/swing/JTable.html#getAutoCreateColumnsFromModel%28%29为真。当该属性为真时,JTable http://download.oracle.com/javase/6/docs/api/javax/swing/JTable.html将填充表列模型 http://download.oracle.com/javase/6/docs/api/javax/swing/table/TableColumnModel.html的值来自表模型 http://download.oracle.com/javase/6/docs/api/javax/swing/table/TableModel.html.

似乎没有人能保证两者保持同步。举个例子,JTable.getColumnName() http://download.oracle.com/javase/6/docs/api/javax/swing/JTable.html#getColumnName%28int%29将返回表模型 http://download.oracle.com/javase/6/docs/api/javax/swing/table/TableModel.html列名无论是什么表列模型 http://download.oracle.com/javase/6/docs/api/javax/swing/table/TableColumnModel.html实际上显示在屏幕上。

我注意到的另一件有趣的事情是表模型 http://download.oracle.com/javase/6/docs/api/javax/swing/table/TableModel.html仅限于字符串列,而表列模型 http://download.oracle.com/javase/6/docs/api/javax/swing/table/TableColumnModel.html允许您将任何对象传递给表格单元渲染器 http://download.oracle.com/javase/6/docs/api/javax/swing/table/TableColumn.html#getHeaderRenderer%28%29。 Javadocsays http://download.oracle.com/javase/6/docs/api/javax/swing/table/TableColumn.html#setHeaderValue%28java.lang.Object%29这些值仅限于字符串,但实际上这是特定于实现的。没有什么可以阻止您编写一个使用J组件 http://download.oracle.com/javase/6/docs/api/javax/swing/JComponent.html value.

总之: 表列模型 http://download.oracle.com/javase/6/docs/api/javax/swing/table/TableColumnModel.html是列值的最终拥有者。表列模型 http://download.oracle.com/javase/6/docs/api/javax/swing/table/TableColumnModel.html只问表模型 http://download.oracle.com/javase/6/docs/api/javax/swing/table/TableModel.html仅当它还没有值时才获取值。例如,如果您将一列传递到JTable.addColumn() http://download.oracle.com/javase/6/docs/api/javax/swing/JTable.html#addColumn%28javax.swing.table.TableColumn%29不指定标头值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TableModel 与 ColumnModel:谁拥有列值? 的相关文章

随机推荐