• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JTableのカラム幅を一部だけ固定する
#navi(../)
*JTableのカラム幅を一部だけ固定する [#y43b86b8]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:2004-02-02~
更新日:&lastmod;
---
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
---
* 概要 [#summary]
`JTable`のヘッダでカラム幅を一部だけ固定します。

#contents
#download(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTM9YcNZfI/AAAAAAAAAaA/sbjwdihBwqY/s800/FixedWidthColumn.png)

**概要 [#eb88b514]
JTableのヘッダでカラム幅を一部だけ固定します。
* サンプルコード [#sourcecode]
#code(link){{
// すべてのカラムヘッダの幅を変更不可に
// tableHeader.setResizingAllowed(false);

#screenshot
// JTable.AUTO_RESIZE_OFFで、あるカラムの幅を変更不可にしたい場合
// table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
// col.setPreferredWidth(50);
// col.setResizable(false);

**サンプルコード [#ycba6fb1]
 //すべてのヘッダカラムの幅を変更不可に
 //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);
// カラムの幅を変更不可にしたい場合
TableColumn col = table.getColumnModel().getColumn(0);
col.setMinWidth(50);
col.setMaxWidth(50);
}}

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

**解説 [#p4a1f313]
-JTableHeader の setResizingAllowed(booelan)を使うと、すべてのカラム幅が変更不可になってしまう
-TableColumnのsetResizable(boolean)は、JTable#setAutoResizeMode(JTable.AUTO_RESIZE_OFF)の場合でなければならない
- `JTableHeader#setResizingAllowed(boolean)`を使うと、すべてのカラム幅が変更不可となる
- `TableColumn#setResizable(boolean)`は、`JTable#setAutoResizeMode(JTable.AUTO_RESIZE_OFF)`の場合のみ有効
- `TableColumn#setMaxWidth(int)`、`TableColumn#setMinWidth(int)`を使用して、カラム幅を固定すると、`JTable.AUTO_RESIZE_OFF`でなくても有効

上記のような条件でも、setMaxWidth(int)、setMinWidth(int)を使用すると、カラム幅を固定することができます。
----
- カラム幅を`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);
}}

サンプルでは、一番最初のカラム幅が50ptで固定しています。カーソルも変化しないようにする場合は、setResizable(false)も一緒に指定します。
----
- 各カラムの幅を固定するのではなく`JTable`を`2`つ使用して(`model`は`1`つ)あるカラムを常に表示(スクロールで隠れないよう固定)する場合は、[https://tips4java.wordpress.com/2008/11/05/fixed-column-table/ Fixed Column Table ≪ Java Tips Weblog]や、[[JTableの列固定とソート>Swing/FixedColumnTableSorting]]などを参照
- カラムの位置を固定してドラッグなどでの移動を禁止したい場合は[[JTableのヘッダ入れ替えを禁止>Swing/Reordering]]を参照

また、以下のようにカラム幅を0に固定すると、表示されない列を作成することができます。一時的にカラムを隠したいけど、removeColumn(col)、addColumn(col)、moveColumn(…)のように元の場所に戻すのが面倒なときに使えるかもしれません。
 TableColumn col = jtable.getColumnModel().getColumn(1);
 col.setMinWidth(0);
 col.setMaxWidth(0);
* 参考リンク [#reference]
//- [http://access1.sun.com/FAQSets/FixedColumnExample.java.html Fixed Column Example]
//- [http://www2.gol.com/users/tame/swing/examples/JTableExamples1.html FixedColumnExample]
- [https://tips4java.wordpress.com/2008/11/05/fixed-column-table/ Fixed Column Table ≪ Java Tips Weblog]
- [[JTableの列固定とソート>Swing/FixedColumnTableSorting]]

各カラムの幅を固定するのではなく、表を2つ使用してあるカラムを常に表示(スクロールで隠れないよう固定)しておく場合は、[[Fixed Column Example>http://access1.sun.com/FAQSets/FixedColumnExample.java.html]]を参照してください。

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

**参考リンク [#sfbc562d]
-[[FixedColumnExample>http://www.physci.org/codes/display.jsp?fl=%2Fcodes%2Ftame%2Ftame%2Fexamples%2FFixedColumnExample.java]]
-[[Fixed Column Example>http://access1.sun.com/FAQSets/FixedColumnExample.java.html]]

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