appendix> swing> JTable | TOPUPPREVNEXT |
表形式のビューを提供します。
JTable 自身にデータを保持することもできますが、 ここでは簡単なデータモデルを用意し表示する例を紹介します。
データモデルを JTable に渡して表の形に表示させるのですが、 データモデルは最低限次の3つの機能を提供しなければいけません。
データモデルに機能を追加して、 変更された値をデータモデルに反映させたり、 カラム(列)に表題をつけたりしてみましょう。
java.lang.Object
├ java.awt.Component
│ └ java.awt.Container
│ └ javax.swing.JComponent
│ ├ javax.swing.JTable
│ ├ javax.swing.table.JTableHeader
│ └ javax.swing.JLabel
│ └ javax.swing.table.DefaultTableCellRenderer
├ javax.swing.table.AbstractTableModel
│ └ javax.swing.table.DefaultTableModel
├ javax.swing.table.DefaultTableColumnModel
└ javax.swing.table.TableColumn
コンストラクタ | 機能 |
---|---|
JTable ( TableModel model ) | データモデル model を指定して JTable を生成します。 |
メソッド | 機能 |
---|---|
void addRowSelectionInterval (
int start ,
int end ) |
start から end 行(両端を含む)を現在の選択領域に追加します。 |
void setAutoResizeMode (int mode ) | mode には次の値が指定できます。
ある列幅を変更した場合(列名欄の区切りをドラッグする)、
全体の幅を変えないために、どこの幅を変更するかという指定です。
|
void clearSelection ( ) | どの行も列も選択されていない状態にします。 |
Dimension getPreferredScrollableViewportSize ( ) |
このテーブルの縦横の大きさをピクセル数で答えます。
【例1】 参照 JTableDemo1sizeB.java の29、38〜47行目 |
void setPreferredScrollableViewportSize ( Dimension size ) |
このテーブルの縦横の大きさをピクセル数で設定します。 【例1】 参照 JTableDemo1size.java の32行目 |
メソッド | 機能 |
---|---|
void addTableModelListener ( TableModelListener l) | テーブルが変更の通知を受け取るリスナを登録します。 テーブルが変更されると tableChanged が呼び出されます。 |
Class<?> getColumnClass ( int columnIndex ) | |
int getColumnCount ( ) | |
String getColomnName ( int columnIndex ) | |
int getRowCount ( ) | |
Object getValueAt ( int rowIndex , int columnIndex ) | |
boolean isCellEditable ( int rowIndex , int columnIndex ) | |
void removeTableModelListener ( TableModelListener l ) | リスナを登録を解除します。 |
void setValueAt ( Object value , int rowIndex , int columnIndex ) |
メソッド | 返す値 |
---|---|
int getRowCount ( ) | テーブルの行数 |
int getColumnCount ( ) | テーブルの列数 |
Object getValueAt ( int row , int col ) | テーブルの ( row , col ) に表示してほしい値 |
その他のおもなメソッド
メソッド | 機能 |
---|---|
void fireTableCellUpdated (
int row ,
int col ) |
テーブルのセル ( roe , col ) の値が 変更されたことをシステム全体に通知します。 |
void fireTableDataChanged ( ) | テーブルの値が変更されたことをシステム全体に通知します。 |
void fireTableStructureChanged ( ) | テーブルの形が変わり全体を表示しなおす必要があることをシステムに通知します。 |
String getColumnName ( int col ) | 第 欄の表題に表示したい文字列を返します。 |
boolean isCellEditable ( int row , int col ) |
デフォルトはセルの編集は不可です。
セル ( row , col ) を編集可能としたい場合には true を返すようにしておきます。 |
void setValueAt (
Object value
int row , int col ) |
セル ( row , col ) の値が変更され value になったという通知です。 |
プログラム JTableDemo1.java
20〜26行目でデータモデルの定義を行い、dataModel という名前をつけています。 このデータモデルは最低限次の3つの機能
実行結果 (J2SE 5.0)
縮小すると |
スクロールペインに貼り付けているため縦方向のスクロールが表示されます。 横方向のスクロールは 【例6】 のAUTO_RESIZE_OFF を参照してください。
表題をつけてみましょう。getColumnName を追加します。
大きさを指定しましょう。8、16、32行目を追加しました。
実行結果 (J2SE 1.4)
表題欄をドラッグすると欄の入れ替えが出来ます。 表示が変化しても、プログラム上の row 、 col には影響がありません。
getPreferredScrollableViewportSize をオーバーライドしても同じことが出来ます。
プログラム JTableDemo1sizeB.java
プログラム JTableDemo2.java
30〜39行目に値が変更された場合の処理を追加します。 これもコールバックルーチンです。 つまり、値が変更された場合この setValueAt メソッドを呼び出してもらい、 row 行 col が value に変更された旨を通知してもらう、という仕掛けです。
32行目で正しく整数に変換できた場合にデータを書き直し(33〜34行目)、 35〜36行目でデータが変更された旨をシステム全体に通知します。
実行例
プログラム JTableDemo3.java
実行例
プログラム JTableDemo6.java
実行例
AUTO_RESIZE_ALL_COLUMNS | AUTO_RESIZE_OFF |
---|---|
getAutoResizeMode をオーバーライドしても同じことが出来ます。
プログラム JTableDemo6B.java
更新日:2006-01-11