Swing/FixedWidthColumn のバックアップの現在との差分(No.5)
2021-03-19 (金) 00:46:15
概要
JTable
のヘッダでカラム幅を一部だけ固定します。
Screenshot
Advertisement
//tableHeader.setResizingAllowed(false); //jtable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); //col.setPreferredWidth(50); //col.setResizable(false); TableColumn col = jtable.getColumnModel().getColumn(0); col.setMinWidth(50); col.setMaxWidth(50); //col = jtable.getColumnModel().getColumn(1); //col.setMinWidth(0); //col.setMaxWidth(0);
サンプルコード
解説
上記のサンプルでは、一番最初のカラム幅が50px
で固定となるように、TableColumn#setMaxWidth(int)
、TableColumn#setMinWidth(int)
を使用しています。カーソルも変化しないようにする場合は、setResizable(false)
も一緒に指定します。
-
JTableHeader#setResizingAllowed(boolean)
を使うと、すべてのカラム幅が変更不可となる -
TableColumn#setResizable(boolean)
は、JTable#setAutoResizeMode(JTable.AUTO_RESIZE_OFF)
の場合のみ有効 -
TableColumn#setMaxWidth(int)
、TableColumn#setMinWidth(int)
を使用して、カラム幅を固定すると、JTable.AUTO_RESIZE_OFF
でなくても有効
TableColumn col = jtable.getColumnModel().getColumn(1); col.setMinWidth(0); col.setMaxWidth(0);
- -
- カラム幅を
0
に固定して非表示する方法もある- 一時的にカラムを非表示にしたいが、
JTable#removeColumn(TableColumn)
、JTable#addColumn(TableColumn)
、JTable#moveColumn(TableColumn)
などで元の位置に戻すのが面倒な場合に使用できるが、Tabキーなどによるフォーカス移動が不正になってしまう#spanend #spanadd TableColumn col = table.getColumnModel().getColumn(1); #spanend #spanadd col.setMinWidth(0); #spanend #spanadd col.setMaxWidth(0); #spanend #spanadd
- 一時的にカラムを非表示にしたいが、
- -
- 各カラムの幅を固定するのではなく
JTable
を2
つ使用して(model
は1
つ)あるカラムを常に表示(スクロールで隠れないよう固定)する場合は、Fixed Column Table ≪ Java Tips Weblogや、JTableの列固定とソートなどを参照 - カラムの位置を固定してドラッグなどでの移動を禁止したい場合はJTableのヘッダ入れ替えを禁止を参照