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

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

Posted by terai at 2004-02-02

概要

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

  • &jnlp;
  • &jar;
  • &zip;

#screenshot

サンプルコード

//すべてのヘッダカラムの幅を変更不可に
//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);

//0に固定すると表示されない列が作成できる
//col = table.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 = table.getColumnModel().getColumn(1);
col.setMinWidth(0);
col.setMaxWidth(0);

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

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

参考リンク

コメント