我已经创建了ColumnAutofitTable扩展JTable,参考http://tips4java.wordpress.com/2008/11/10/table-column-adjuster/
然而,它有时会显示奇怪的行为作为附图。
通过编写一些日志,我发现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 =,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,边界= javax.swing.border.EmptyBorder中@ 1dd085d,旗帜= 25165832,MAXIMUMSIZE =,=的minimumSize,首选大小=,=的DefaultIcon,disabledIcon =,=的HorizontalAlignment LEADING,horizontalTextPosition = 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模块,我怎样才能避免这种事情?
答案 0 :(得分:2)
渲染器是共享资源,很可能您看到渲染器使用的最后一个值/单元格,可能不是您要报告的单元格