TITLE:JTableのカラム幅を一部だけ固定する

Posted by at 2004-02-02

JTableのカラム幅を一部だけ固定する

`JTable`のヘッダでカラム幅を一部だけ固定します。

  • &jnlp;
  • &jar;
  • &zip;
FixedWidthColumn.png

サンプルコード

//すべてのヘッダカラムの幅を変更不可に
//tableHeader.setResizingAllowed(false);

//JTable.AUTO_RESIZE_OFFで、あるカラムの幅を変更不可にしたい場合
//table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
//col.setPreferredWidth(50);
//col.setResizable(false);

//カラムの幅を変更不可にしたい場合
TableColumn col = table.getColumnModel().getColumn(0);
col.setMinWidth(50);
col.setMaxWidth(50);
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、一番最初のカラム幅が`50pxで固定となるように、TableColumn#setMaxWidth(int)TableColumn#setMinWidth(int)を使用しています。カーソルも変化しないようにする場合は、setResizable(false)`も一緒に指定します。

  • メモ
    • `JTableHeader#setResizingAllowed(booelan)`を使うと、すべてのカラム幅が変更不可となる
    • `TableColumn#setResizable(boolean)は、JTable#setAutoResizeMode(JTable.AUTO_RESIZE_OFF)`の場合のみ有効
    • `TableColumn#setMaxWidth(int)TableColumn#setMinWidth(int)を使用して、カラム幅を固定すると、JTable.AUTO_RESIZE_OFF`でなくても有効

以下のようにカラム幅を`0に固定すると、表示されない列を作成することができます。一時的にカラムを隠したいけど、JTable#removeColumn(TableColumn)JTable#addColumn(TableColumn)JTable#moveColumn(TableColumn)`のように元の場所に戻すのが面倒なときに使えるかもしれません(ただし、TABキーなどによるフォーカス移動がおかしくなります)。

TableColumn col = table.getColumnModel().getColumn(1);
col.setMinWidth(0);
col.setMaxWidth(0);

各カラムの幅を固定するのではなく、`JTable2つ使用して(model1`つ)あるカラムを常に表示(スクロールで隠れないよう固定)しておく場合は、Fixed Column Table ≪ Java Tips Weblogや、JTableの列固定とソートなどを参照してください。


カラムの位置を固定してドラッグなどでの移動を禁止したい場合は、JTableのヘッダ入れ替えを禁止を参照してください。

参考リンク

コメント