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

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

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

**サンプルコード [#ycba6fb1]
#code{{
#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]
-JTableHeader の setResizingAllowed(booelan)を使うと、すべてのカラム幅が変更不可になってしまう
-TableColumnのsetResizable(boolean)は、JTable#setAutoResizeMode(JTable.AUTO_RESIZE_OFF)の場合でなければならない

上記のような条件でも、setMaxWidth(int)、setMinWidth(int)を使用すると、カラム幅を固定することができます。

サンプルでは、一番最初のカラム幅が50pxで固定しています。カーソルも変化しないようにする場合は、setResizable(false)も一緒に指定します。

----
以下のようにカラム幅を0に固定すると、表示されない列を作成することができます。一時的にカラムを隠したいけど、removeColumn(col)、addColumn(col)、moveColumn(…)のように元の場所に戻すのが面倒なときに使えるかもしれません(ただし、タブキーなどによるフォーカス移動がおかしくなります)。
#code{{
TableColumn col = table.getColumnModel().getColumn(1);
col.setMinWidth(0);
col.setMaxWidth(0);
}}

----
各カラムの幅を固定するのではなく、表を2つ使用してあるカラムを常に表示(スクロールで隠れないよう固定)しておく場合は、[[Fixed Column Table ≪ Java Tips Weblog>http://tips4java.wordpress.com/2008/11/05/fixed-column-table/]]、[[JTableの列固定とソート>Swing/FixedColumnTableSorting]]などを参照してください。
各カラムの幅を固定するのではなく、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]
//-[[Fixed Column Example>http://access1.sun.com/FAQSets/FixedColumnExample.java.html]]
-[[FixedColumnExample>http://www.crionics.com/products/opensource/faq/swing_ex/JTableExamples1.html]]
-[[Fixed Column Table ≪ Java Tips Weblog>http://tips4java.wordpress.com/2008/11/05/fixed-column-table/]]
//-[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