我参考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 =,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,invalid,alignmentX = 0.0,alignmentY = 0.0,border = javax.swing.border.EmptyBorder @ 1dd085d,flags = 25165832,maximumSize =,minimumSize =, preferredSize =,defaultIcon =,disabledIcon =,horizo​​ntalAlignment = LEADING,horizo​​ntalTextPosition = 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模块的情况下避免这种情况?

最佳答案

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

09-05 05:39