JTable クラス
- [内容]
- 2 次元の表を作成するためのクラスです
- [主な変数]
- public static final int AUTO_RESIZE_ALL_COLUMNS
- すべてのサイズ変更操作で,各列を均等にサイズ変更する
- public static final int AUTO_RESIZE_LAST_COLUMN
- すべてのサイズ変更操作で,最終列だけに調整を適用する
- public static final int AUTO_RESIZE_NEXT_COLUMN
- 列をUIで調整するときは,次の列を逆方向に調整する
- public static final int AUTO_RESIZE_OFF
- 列幅の調整は自動的に行わずに,スクロールバーを使う
- public static final int AUTO_RESIZE_SUBSEQUENT_COLUMNS
- UIを調整するときは,それ以降の列を変更して列の合計幅を維持する(デフォルト)
- [コンストラクタ]
- public JTable(Object[][] rowData, Object[] columnNames)
- 2 次元配列 rowData の値を表示する JTable オブジェクトを生成する.各列の名前は,columnNames となる.
- public JTable(TableModel dm)
- データモデル dm,デフォルト列モデル,および,デフォルト選択モデルで初期化される JTable オブジェクトを生成する
- [主なメソッド]
- public JTableHeader getTableHeader()
- テーブルヘッダを返す
- public void setAutoResizeMode(int mode)
- テーブルのサイズ変更時にテーブルの自動サイズ変更モードを設定する.引数は,AUTO_RESIZE_OFF,AUTO_RESIZE_NEXT_COLUMN,AUTO_RESIZE_SUBSEQUENT_COLUMNS,AUTO_RESIZE_LAST_COLUMN,または,AUTO_RESIZE_ALL_COLUMNS の中から選択する.
- public void setRowHeight(int rowHeight)
- public void setRowHeight(int row, int rowHeight)
- すべて,または,指定された行の高さを設定する
- public void setRowMargin(int rowMargin)
- 行間のマージンを設定する
- public void setShowHorizontalLines(boolean showHorizontalLines)
- セル間に水平線を描画するか否かを設定する
- public void setShowVerticalLines(boolean showVerticalLines)
- セル間に垂直線を描画するか否かを設定する
- public void setValueAt(Object aValue, int row, int column)
- セルの値を設定する
- [使用例]
- プログラム例は,JTable クラスの各メソッド等の使用例です.2 次元配列を使用して,JTable オブジェクトを生成しています.目標の欄は,平均が 3000 を超えると true になるようにしています.ここをクリックするとアプレット版が表示されます(プログラム).この方法による作成は簡単ですが,
- イメージ等をセルに貼り付けても,その名前しか出力されない
- 数字が右寄せにならない
- すべてのセルが編集可能となってしまう
- セルの値による再計算が面倒である( TableModelListener の tableChanged メソッドを利用してセルの値の変化を知ることはできますが,関連するセルの値の修正が面倒です.この例においては,セルの値の変更を Java コンソールにメッセージとして出力させているだけです)
- 等の問題があります.

- プログラム例は,上と同じデータに対して,AbstractDataModel を使用して表を作成しています.目標の欄は,平均が 3000 を超えるとチェックが入るようにしています.図からも明らかなように,上で述べた欠点が改善されています.なお,この例では,数値を変更すると,平均,合計,及び,目標の欄も対応して変化します.ここをクリックするとアプレット版が表示されます(プログラム).
- なお,AbstractDataModel クラスは,抽象クラスであり,以下のようなメソッドを持っています.
- public void fireTableCellUpdated(int row, int column)
- row 行 column 列のセルが変更されたことを,すべてのリスナーに通知する
- public Class getColumnClass(int columnIndex)
- レンダラー(セルを描く)を使用するためには,実装する必要がある.実装しないと,上の例と同じ表示形式になってしまう.レンダラーは,各セルの値によって,以下のような表示方法をする.
- Boolean : チェックボックスを描く
- Number : 右寄せの数字
- ImageIcon : 中央にアイコン
- Object : オブジェクトのラベル(文字列)
- public int getColumnCount() ( TableModel から継承)
- 列数を返すメソッドであり,必ず実装する必要がある
- public String getColumnName(int column)
- 列名を返すメソッドであり,実装しないと,列名がデフォルトの名前( A, B, ・・・ )になる
- public int getRowCount() ( TableModel から継承)
- 行数を返すメソッドであり,必ず実装する必要がある
- public Object getValueAt(int rowIndex, int columnIndex) (TableModelから継承)
- セルの値を返すメソッドであり,必ず実装する必要がある
- public boolean isCellEditable(int rowIndex, int columnIndex)
- セルが編集可能か否かを返す.実装しないと,すべてのセルが編集不可能になる.
- public void setValueAt(Object aValue, int rowIndex, int columnIndex)
- セルの値を設定する.セルを編集しない場合は,実装する必要はない.

- [参照]
- JTree