我参考http://tips4java.wordpress.com/2008/11/10/table-column-adjuster/创建了扩展JTable的ColumnAutofitTable
但是,有时它会显示为奇怪的行为,如附图所示。
通过写一些日志,我发现当列宽被错误地扩展时,TableModel中的值和CellRenderer中的值是不同的,这在正常情况下是相同的。
正常情况下,TableModel的值与CellRenderer的文本相同。
行== 0,列== 1,旧宽度== 0,新宽度== 78,值== 00d
01:52:07,渲染器==
javax.swing.table.DefaultTableCellRenderer $ UIResource [Table.cellRenderer,-74,-15,0x0,invalid,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,invalid,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的错误?
2)如何在不修改核心Java模块的情况下避免这种情况?
最佳答案
渲染器是共享资源,很可能您看到的是渲染器使用的最后一个值/单元格,可能不是您要报告的单元格