セルに初期値を表示させるには?


一般的な表計算ソフトを作るつもりなら別ですが、ウインドウの一部分にこうした表を表示させたいという場合には、表示する表などのデータがあらかじめ用意されていて、それを表示させることが多いものです。では、あらかじめセルに表示される値を用意してJTableを作成してみましょう。

package jp.allabout.java;

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

public class SampleApp extends JFrame{
  private static final long serialVersionUID = 1L;
  private JTable table;
  private JScrollPane pane;
  
  public SampleApp(){
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    String[][] data = {
        {"A","B","C",""},
        {"123","456","789",""},
        {"あいう","かきく","さしす",""}
    };
    String[] header = {"A","B","C","D"};
    table = new JTable(data,header);
    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);
  }
}

セルの初期値を配列で用意して表示させる。

初期値を表示させるもっとも簡単な方法は、あらかじめ配列として表示させる値をまとめておき、これをJTableに設定するというものです。ここでは、まずdataという2次元配列を用意し、ここに表示させる値をまとめておきました。これとは別に、もう1つheaderという配列が用意されていますが、これはヘッダー名をまとめたものです。

そして、JTableのインスタンスを作成する際に、この2つの配列(表示する2次元配列と、ヘッダー名の配列)を引数に指定してnewします。これで、これらの値を表示するテーブルが作成されます。

実際にやってみるとわかることですが、これで値を設定した場合、縦横の行数・文字数は、用意した値の数分しか用意されません。必要なデータだけを表示する表を作成するならこれは便利な方法ですが、広いシートの一部分に値を設定するだけ、というような場合には少々面倒になります(他のセルの分の「空っぽの値」を用意しなければいけませんから)。

また、セルの値を操作しようという場合も、これではうまくいきません。JTableでは、テーブルの個々のセルの値を取り出したり変更したりする機能はないのです。じゃあ、どうやって? それは、JListの場合を思い出せば、自然と答えがわかってくるのではないでしょうか? そう、「モデル」というやつを使うのです!