• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JTableのカラム幅を一部だけ固定する
#navi(../)
#tags(JTable, JTableHeader, TableColumn)
RIGHT:Posted by &author(aterai); at 2004-02-02
*JTableのカラム幅を一部だけ固定する [#y43b86b8]
``JTable``のヘッダでカラム幅を一部だけ固定します。

-&jnlp;
-&jar;
-&zip;

//#screenshot
#ref(http://lh3.ggpht.com/_9Z4BYR88imo/TQTM9YcNZfI/AAAAAAAAAaA/sbjwdihBwqY/s800/FixedWidthColumn.png)

**サンプルコード [#ycba6fb1]
#code(link){{
//すべてのヘッダカラムの幅を変更不可に
//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);
}}

**解説 [#p4a1f313]
上記のサンプルでは、一番最初のカラム幅が``50px``で固定となるように、``TableColumn#setMaxWidth(int)``、``TableColumn#setMinWidth(int)``を使用しています。カーソルも変化しないようにする場合は、``setResizable(false)``も一緒に指定します。

- メモ
-- ``JTableHeader#setResizingAllowed(booelan)``を使うと、すべてのカラム幅が変更不可となる
-- ``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)``のように元の場所に戻すのが面倒なときに使えるかもしれません(ただし、タブキーなどによるフォーカス移動がおかしくなります)。
以下のようにカラム幅を``0``に固定すると、表示されない列を作成することができます。一時的にカラムを隠したいけど、``JTable#removeColumn(TableColumn)``、``JTable#addColumn(TableColumn)``、``JTable#moveColumn(TableColumn)``のように元の場所に戻すのが面倒なときに使えるかもしれません(ただし、KBD{TAB}キーなどによるフォーカス移動がおかしくなります)。

#code{{
TableColumn col = table.getColumnModel().getColumn(1);
col.setMinWidth(0);
col.setMaxWidth(0);
}}

----
各カラムの幅を固定するのではなく、``JTable``を``2``つ使用して(``model``は``1``つ)あるカラムを常に表示(スクロールで隠れないよう固定)しておく場合は、[http://tips4java.wordpress.com/2008/11/05/fixed-column-table/ Fixed Column Table ≪ Java Tips Weblog]や、[[JTableの列固定とソート>Swing/FixedColumnTableSorting]]などを参照してください。

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

**参考リンク [#sfbc562d]
//- [http://access1.sun.com/FAQSets/FixedColumnExample.java.html Fixed Column Example]
- [http://www.crionics.com/products/opensource/faq/swing_ex/JTableExamples1.html FixedColumnExample]
- [http://tips4java.wordpress.com/2008/11/05/fixed-column-table/ Fixed Column Table ≪ Java Tips Weblog]
- [[JTableの列固定とソート>Swing/FixedColumnTableSorting]]

**コメント [#t86a6bd8]
#comment