http://tips4java.wordpress.com/2008/11/10/table-column-adjuster/を参照して、JTable を拡張する ColumnAutofitTable を作成しました。
ただし、添付の画像のように奇妙な動作をすることがあります。
いくつかのログを書いてみると、TableModel の値と CellRenderer の値は、列幅が誤って拡張された場合に異なることがわかりました。これは、通常は同じです。
通常の場合、TableModel の Value と 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 モジュールを変更せずにこの種のことを回避するにはどうすればよいですか?