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

編集者:Terai Atsuhiro~

作成日:2004-02-02
更新日:2021-03-19 (金) 00:46:15
  • category: swing folder: FixedWidthColumn title: JTableのカラム幅を一部だけ固定する tags: [JTable, JTableHeader, TableColumn] author: aterai pubdate: 2004-02-02 description: JTableのヘッダでカラム幅を一部だけ固定します。 image: https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTM9YcNZfI/AAAAAAAAAaA/sbjwdihBwqY/s800/FixedWidthColumn.png

概要

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

概要

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);

サンプルコード

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

-[[サンプルを起動>http://terai.xrea.jp/swing/fixedwidthcolumn/sample.jnlp]]
-[[jarファイル>http://terai.xrea.jp/swing/fixedwidthcolumn/sample.jar]]
-[[ソース>http://terai.xrea.jp/swing/fixedwidthcolumn/src.zip]]
#spandel
**解説 [#p4a1f313]
#spanend
-JTableHeader の setResizingAllowed(booelan)を使うと、すべてのカラム幅が変更不可になってしまう
-TableColumnのsetResizable(boolean)は、JTable#setAutoResizeMode(JTable.AUTO_RESIZE_OFF)の場合でなければならない
#spanadd
// JTable.AUTO_RESIZE_OFFで、あるカラムの幅を変更不可にしたい場合
#spanend
#spanadd
// table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
#spanend
#spanadd
// col.setPreferredWidth(50);
#spanend
#spanadd
// col.setResizable(false);
#spanend

#spandel
上記のような条件でも、setMaxWidth(int)、setMinWidth(int)を使用すると、カラム幅を固定することができます。
#spanend
#spanadd
// カラムの幅を変更不可にしたい場合
#spanend
#spanadd
TableColumn col = table.getColumnModel().getColumn(0);
#spanend
#spanadd
col.setMinWidth(50);
#spanend
#spanadd
col.setMaxWidth(50);
#spanend
#spanadd
View in GitHub: Java, Kotlin
サンプルでは、一番最初のカラム幅が50ptで固定しています。カーソルも変化しないようにする場合は、setResizable(false)も一緒に指定します。

解説

上記のサンプルでは、一番最初のカラム幅が50pxで固定となるように、TableColumn#setMaxWidth(int)TableColumn#setMinWidth(int)を使用しています。カーソルも変化しないようにする場合は、setResizable(false)も一緒に指定します。 また、以下のようにカラム幅を0に固定すると、表示されない列を作成することができます。一時的にカラムを隠したいけど、removeColumn(col)、addColumn(col)、moveColumn(…)のように元の場所に戻すのが面倒なときに使えるかもしれません。
TableColumn col = jtable.getColumnModel().getColumn(1);
col.setMinWidth(0);
col.setMaxWidth(0);
  • JTableHeader#setResizingAllowed(boolean)を使うと、すべてのカラム幅が変更不可となる
  • TableColumn#setResizable(boolean)は、JTable#setAutoResizeMode(JTable.AUTO_RESIZE_OFF)の場合のみ有効
  • TableColumn#setMaxWidth(int)TableColumn#setMinWidth(int)を使用して、カラム幅を固定すると、JTable.AUTO_RESIZE_OFFでなくても有効
各カラムの幅を固定するのではなく、表を2つ使用して、あるカラムを常に表示しておく(スクロールで隠れないよう固定)場合は、Fixed Column Exampleを参照してください。
  • -
  • カラム幅を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のヘッダ入れ替えを禁止を参照してください。
  • -

参考リンク

参考リンク

コメント

コメント