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

編集者:Terai Atsuhiro
作成日:2004-02-02
更新日:2021-03-19 (金) 00:46:15

概要

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

サンプルコード

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

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

//幅の変更を不可にしたい場合
TableColumn col = jtable.getColumnModel().getColumn(0);
col.setMinWidth(50);
col.setMaxWidth(50);

//0に固定すると表示されない列が作成できる
//col = jtable.getColumnModel().getColumn(1);
//col.setMinWidth(0);
//col.setMaxWidth(0);

解説

  • JTableHeader の setResizingAllowed(booelan)を使うと、すべてのカラム幅が変更不可になってしまう
  • TableColumnのsetResizable(boolean)は、JTable#setAutoResizeMode(JTable.AUTO_RESIZE_OFF)の場合でなければならない

上記のような条件でも、setMaxWidth(int)、setMinWidth(int)を使用すると、カラム幅を固定することができます。

サンプルでは、一番最初のカラム幅が50ptで固定しています。カーソルも変化しないようにする場合は、setResizable(false)も一緒に指定します。

また、以下のようにカラム幅を0に固定すると、表示されない列を作成することができます。一時的にカラムを隠したいけど、removeColumn(col)、addColumn(col)、moveColumn(…)のように元の場所に戻すのが面倒なときに使えるかもしれません。

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

各カラムの幅を固定するのではなく、表を2つ使用して、あるカラムを常に表示しておく(スクロールで隠れないよう固定)場合は、Fixed Column Exampleを参照してください。

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

参考リンク

コメント