0

列幅を列名の長さに設定しようとしています。私の問題は、それを設定できないことです。次のコードを使用すると、テーブルは次のようになります。

tableA.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
  for(int i = 0; i < tableA.getColumnCount(); i++) {
int columnLength = (modelA.getColumnName(i)).length();
tableA.getColumnModel().getColumn(i).setPreferredWidth(columnLength);
//  tableA.getColumnModel().getColumn(i).setMinWidth(columnLength);
//  tableA.getColumnModel().getColumn(i).setMaxWidth(columnLength);
  }

テーブルモデルから列の長さを正しく取得しています。

上記のコードを使用すると、テーブルは次のようにパックされます。

列幅を設定する

どこが間違っているのか理解できません。

4

4 に答える 4

6

Danが指摘したように、使用されているフォントに基づいて列名の実際の幅を計算する必要があります。

何かのようなもの:

String name = modelA.getColumnName(i);
Font f = tableA.getFont();
FontMetrics fm = tableA.getFontMetrics(f);
int width = fm.stringWidth(name);
tableA.getColumnModel().getColumn(i).setPreferredWidth(width);

これは非常に簡略化された例であることに注意してください。

完全に正しくしたい場合は、正しい値を取得するために、各列のレンダラーにFontとFontMetricsを照会する必要があります。

すべてのレンダラーがJTableと同じフォントを使用している場合、これは問題ありません。

于 2012-11-05T14:48:02.147 に答える
3

はピクセル単位のsetPreferredWidth値を期待しますが、列名の長さはa String(の文字数String)の長さです。

于 2012-11-05T14:31:44.673 に答える
2

SwingXを使用してもかまわない場合はTableColumnExt#setPrototypeValue、列幅を決定するために使用される「プロトタイプ」値を設定できるメソッドを使用できます。

于 2012-11-05T14:43:59.340 に答える
2
于 2012-11-05T14:45:07.377 に答える