概要

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

サンプルコード

// すべてのカラムヘッダの幅を変更不可に
// 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(boolean)を使うと、すべてのカラム幅が変更不可となる
  • 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);
      

参考リンク

コメント