テーブルモデルの利用
では、表示された各項目(テーブルの「セル」と呼ばれるものです)の値を取り出したり、変更したりするにはどうすればよいのでしょうか。JTableに、そのためのメソッドなどが用意されているんでしょうか。
実は、違います。JTableを調べても、セルの値を操作するメソッドなどないのです。では、どうすればいいのか。これは、JListやJTreeがどうやっていたかを思い出せば、想像がつくでしょう。そう、「モデル」クラスを利用するのです。
テーブルのデータは、「テーブルモデル」と呼ばれるクラスによって管理されます。これは、javax.swing.table.TableModelクラスとして用意されています。一般的には、これを継承した「DefaultTableModel」というクラスを利用します。
では、このクラスを使ってテーブルモデルを作成し、その値を設定する簡単なサンプルを作成してみましょう。
package jp.allabout;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class SampleApp extends JFrame {
JTable table;
JScrollPane scroll;
DefaultTableModel model;
public SampleApp(){
this.setSize(new Dimension(300,200));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
model = new DefaultTableModel(10,5);
table = new JTable(model);
scroll = new JScrollPane(table);
this.add(scroll,BorderLayout.CENTER);
for(int i = 0;i < 10;i++)
for(int j = 0;j < 5;j++)
model.setValueAt("R:" + i + " C:" + j, i, j);
}
public static void main(String[] args) {
new SampleApp().setVisible(true);
}
}
DefaultTableModelでテーブルに値を設定し表示する。 |
これは、DefaultTableModelを使って10行×5列のテーブルデータを作成し、それぞれのセルに値を設定して表示させたものです。ここでは、まず行数・列数を指定してDefaultTableModelインスタンスを作成していますね。
new DefaultTableModel( 行数 , 列数 );
これで、指定したデータ数のテーブルモデルが用意されます。後は、このインスタンスを引数に指定してnew JTableするだけです。これで、指定のテーブルモデルを使ったJTableインスタンスが作成されます。
実際のテーブルの値の操作は、作成したDefaultTableModelインスタンスのメソッドを呼び出して行います。ここでは、こんな感じですべてのセルの値を設定していますね。
for(int i = 0;i < 10;i++)
for(int j = 0;j < 5;j++)
model.setValueAt("R:" + i + " C:" + j, i, j);
DefaultTableModelの「setValueAt」というメソッドは、引数に設定するString、セルの縦位置、横位置(それぞれ上および左から何番目か)を引数に指定します。セルの値を取り出す場合も、「getValueAt( 行数 , 列数 )」といったメソッドを使って簡単に取得できます。
テーブルモデルでセルの値を操作すると、リアルタイムに表示されているセルの値も変更されます。非常に簡単にセルを扱えることが実感できるはずです。