ユーザインタフェース 14章 テーブル
- 14.1. javax.swing.JTable
- 14.2. javax.swing.table.TableModel
- 14.3. javax.swing.table.TableColumn
14.3. javax.swing.table.TableColumn
「TableColumn」はテーブルの列に関する属性を管理するクラスです。属性には、幅・最大幅・最小幅・サイズの変更可能性・列の名前・列のセルを描画する「レンダラー」・セルを編集する際の「エディター」があります。以下ではカラムのサイズを設定しています。
JTable table=new JTable(model); TableColumn column=table.getColumn("Sunday"); column.setMaxWidth(20); column.setMinWidth(10); column.setWidth(15); table.sizeColumnsToFit(0);
「JTable」の「getColumn」メソッドは、テーブルから「TableColumn」オブジェクトを取得します。引数にはカラムを特定できる識別子(カラム名)を指定します。「setMaxWidth」は最大幅、「setMinWidth」は最小幅、「setWidth」は現在の幅を設定するメソッドです。最後の「sizeColumnsToFit」はカラムに設定した幅をテーブルに反映させるためのメソッドです。引数に「-1」以外を指定すると、テーブル内のカラムのサイズが変更された事を認識します。このメソッドを呼び出さなければカラムの幅が変わらないのは、バグとも言われています。
各列のタイトルを表示するのにちょうど必要な幅を取得したい場合があるかもしれません。それには「レンダラー」オブジェクトを利用する必要があるのですが、ここでは説明を省略します。
「JTable」にはユーザが1つの列のサイズを変えた場合、他の列への変更の反映方法を指定する事ができます。「setAutoResizeMode」メソッドで指定します。引数には「JTable」の以下のクラス変数の中から1つ指定します。
AUTO_RESIZE_OFF | テーブルのサイズを変更する事により、サイズの変更を対象とする列だけに影響させます。 |
AUTO_RESIZE_LAST_COLUMN | テーブルのサイズは変えず、一番右の列で調節します。 |
AUTO_RESIZE_SUBSEQUENT_COLUMNS | サイズを変更する列の右側にある全ての列で調節します。 |
AUTO_RESIZE_NEXT_COLUMN | 右隣の列で調節します。 |
AUTO_RESIZE_ALL_COLUMNS | サイズを変更する列以外の全ての列で調節します。 |
(実習課題3)
以下のプログラムを作成しなさい。
- ウィンドウに含まれるコンポーネントはテーブルとコンボボックス。
- テーブルの行数・列数・初期データは任意。
- コンボボックスによってテーブル列の変更モードを切り替えられるようにする事。