DefaultTableModelを用意する


JTableのデータを管理するモデルクラスは、javax.swing.tableパッケージのTableModelというインターフェイスを実装したクラスとして用意します。標準で、DefaultTableModelという実装済みのクラスが用意されていますので、これを利用するのが一番簡単でしょう。

では、DefaultTableModelでモデルクラスを用意し、その中の値を操作する簡単なサンプルを作成してみましょう。

package jp.allabout.java;

import java.awt.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class SampleApp extends JFrame{
  private static final long serialVersionUID = 1L;
  private JTable table;
  private JScrollPane pane;
  private DefaultTableModel model;
  
  public SampleApp(){
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    model = new DefaultTableModel(10,5);
    for(int i = 0;i < 3;i++)
      for(int j = 0;j < 3;j++)
        model.setValueAt(i +"," + j, i, j);
    table = new JTable(model);
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    pane = new JScrollPane(table);
    this.add(pane,BorderLayout.CENTER);
    this.setSize(new Dimension(300,200));
  }
  
  public static void main(String[] args) {
    new SampleApp().setVisible(true);
  }
}

DefaultTableModelを使ってセルの値を設定する。

ここではモデルを使ってJTableを作成し、この中のセルに繰り返しを使って値を設定しています。では、順に説明をしていきましょう。

まず、DefaultTableModelインスタンスを作成します。これはそのまま引数なしで作成することもできますが、ここでは行数と列数を引数に指定して作成をしました。こうすることで、指定したエリア分のデータ保管領域を用意しておくことができるわけです。

繰り返し部分では、「setValueAt」というメソッドを使って値を設定しています。これは、第1引数に設定する値を、第2、第3引数にセルの縦横の位置をそれぞれ指定します。ここでは値の設定を行いましたが、値を取り出す場合もTableModelの「getValueAt」メソッドで得られます。このメソッドでは、縦横の位置を指定して呼び出すと、その値がObjectインスタンスとして得られます。

JListとJTableを比べてみると、「データの扱い」が似ていることに気がつくことでしょう。もちろん、具体的なメソッド類は違いますが、モデルを用意して追加するという考え方はほぼ共通しています。JTreeやJTableで、この「モデルを使ったコンポーネント」の扱いについて慣れておくとよいでしょう。

※記事内容は執筆時点のものです。最新の内容をご確認ください。
※OSやアプリ、ソフトのバージョンによっては画面表示、操作方法が異なる可能性があります。