我创建了 ColumnAutofitTable 扩展 JTable,参考http://tips4java.wordpress.com/2008/11/10/table-column-adjuster/
然而,它有时会显示奇怪的行为,如附图所示。
通过写一些日志,我发现当列宽被错误扩展时,TableModel中的值和CellRenderer中的值是不同的,在正常情况下是相同的。
正常情况,TableModel 的 Value 和 CellRenderer 的 text 是一样的。
行 == 0,列 == 1,旧宽度 == 0,新宽度 == 78,值 == 00d 01:52:07,渲染器 == javax.swing.table.DefaultTableCellRenderer$UIResource[Table.cellRenderer,- 74,-15,0x0,无效,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.EmptyBorder@1dd085d,flags=25165832,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,horizontalAlignment= LEADING,horizontalTextPosition=TRAILING,iconTextGap=4,labelFor=,text= 00d 01:52:07,verticalAlignment=CENTER,verticalTextPosition=CENTER]
奇怪的情况,有错误的 CellRenderer 文本值
行 == 465,列 == 1,旧宽度 == 78,新宽度 == 333,值 == 00d 00:20:23,渲染器 == javax.swing.table.DefaultTableCellRenderer$UIResource[Table.cellRenderer,216,336 ,74x15,无效,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.EmptyBorder@1dd085d,flags=25165832,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,horizontalAlignment=LEADING,horizontalTextPosition= TRAILING,iconTextGap=4,labelFor=,text=DRIVER:S120146165 IN_QTY:0 OUT_QTY:1 TRUCKER:null ,verticalAlignment=CENTER,verticalTextPosition=CENTER]
我没有在表格中添加任何自定义的单元格渲染器。我使用 setDataVector() 将数据添加到表中,以防止调整每一行的大小。
我的主要问题是:
1)为什么会出现这种症状?是 JTable 还是 CellRenderer 的 bug?
2)如何在不修改核心java模块的情况下避免这种事情?