Gil*_*ili 17 java swing jtable
JTable.getModel().getColumnName()
和之间有什么区别JTable.getColumnModel().getColumn(index).getHeaderValue()
?这两个似乎没有共享任何数据.我的猜测是TableModel.getColumnName()
指示列的文本表示,TableColumn.getHeaderValue()
并TableColumn.getHeaderRenderer()
确定列的外观(它不需要是纯文本).
什么保证两者保持同步?如果两者发生冲突会怎样?
Gil*_*ili 30
如果使用TableModel构造JTable但没有TableColumnModel,JTable将使用createDefaultColumnModel()创建TableColumnModel并将autoCreateColumnsFromModel设置为true.当此属性为true时,JTable将使用TableModel中的值填充TableColumnModel.
似乎没有人保证两者保持同步.例如,JTable.getColumnName()将返回TableModel列名,而不管TableColumnModel实际显示在屏幕上的内容.
我注意到的另一个有趣的事情是TableModel仅限于String列,而TableColumnModel允许您将任何Object传递给TableCellRenderer.Javadoc 说这些值仅限于字符串,但实际上这是特定于实现的.没有什么能阻止您编写使用JComponent值的实现.
总结:TableColumnModel是列值的最终所有者.TableColumnModel 仅在TableModel没有值时才询问TableModel.例如,在将列传递给JTable.addColumn()而不指定标头值的情况下.