TableModel和CellRenderer之间的值差异

时间:2013-01-28 02:13:15

标签: java swing jtable tablecellrenderer

我已经创建了ColumnAutofitTable扩展JTable,参考http://tips4java.wordpress.com/2008/11/10/table-column-adjuster/

然而,它有时会显示奇怪的行为作为附图。 Time Gap column is not resized correctly

通过编写一些日志,我发现TableModel中的值和CellRenderer中的值在不正确地扩展列宽时是不同的,这在正常情况下是相同的。

正常情况下,TableModel的值与CellRenderer的文本相同。

  

行== 0,列== 1,旧宽度== 0,新宽度== 78,值== 00d   01:52:07,渲染器==   javax.swing.table.DefaultTableCellRenderer中的$ UIResource的[Table.cellRenderer,-74,-15,0x0,无效的,alignmentX = 0.0,alignmentY = 0.0,边界= javax.swing.border.EmptyBorder中@ 1dd085d,旗帜= 25165832,MAXIMUMSIZE = ,minimumSize =,preferredSize =,defaultIcon =,disabledIcon =,horizo​​ntalAlignment = LEADING,horizo​​ntalTextPosition = 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,边界= javax.swing.border.EmptyBorder中@ 1dd085d,旗帜= 25165832,MAXIMUMSIZE =,=的minimumSize,首选大小=,=的DefaultIcon,disabledIcon =,=的Horizo​​ntalAlignment LEADING,horizo​​ntalTextPosition = TRAILING,iconTextGap = 4,labelFor =,文本= DRIVER:S120146165   IN_QTY:0 OUT_QTY:1 TRUCKER:null   ,verticalAlignment = CENTER,verticalTextPosition = CENTER]

我没有在表格中添加任何自定义的单元格渲染器。 我使用setDataVector()将数据添加到表中,以防止每行调整大小。

我的主要问题是:
1)为什么这个sympton会发生?它是JTable还是CellRenderer的错误?
2)如果不修改核心java模块,我怎样才能避免这种事情?

1 个答案:

答案 0 :(得分:2)

渲染器是共享资源,很可能您看到渲染器使用的最后一个值/单元格,可能不是您要报告的单元格