SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Javaで軽快に使える「軽量フレームワーク」特集

Javaで軽快に使える「軽量フレームワーク」特集
~サーバーサイドとクライアントサイドのどちらでも対応できるEcho(2)

第24回

  • X ポスト
  • このエントリーをはてなブックマークに追加

テーブルモデルの作成

 では、テーブルモデルから作成しましょう。ここでは「MyTableModel」という名前のクラスとして作成することにします。ここでは、各セルに、行・列数の和を表示させるような形でモデルを用意してみます。

class MyTableModel extends AbstractTableModel {
    private int col = 10;
    private int row = 10;
    
    public MyTableModel(int col,int row){
        super();
        this.col = col;
        this.row = row;
    }

    @Override
    public int getColumnCount() {
        return col;
    }

    @Override
    public int getRowCount() {
        return row;
    }

    @Override
    public Object getValueAt(int col, int row) {
        return "" + (col + row);
    }
}

 AbstractTableModelには、計3つのメソッドが用意されます。これらはそれぞれ以下のような働きをします。

  • getColumnCount――列数を返します。
  • getRowCount――行数を返します。
  • getValueAt――引数で指定された列・行の値を返します。

 ここでは、getValueAtでは単に2つの引数の和を返しているだけですが、もちろん配列などを使って値を管理し、引数に応じて返すようにすることも可能です。

レンダラーの作成

 続いて、2つのレンダラークラスを作成します。ここでは「MyTableRenderer」「MyHeaderRenderer」という名前で用意することにしましょう。

class MyTableRenderer implements TableCellRenderer {

    @Override
    public Component getTableCellRendererComponent(
            Table table, Object val, int col, int row){
        Label label = new Label((String)val);
        TableLayoutData layoutData = new TableLayoutData();
        layoutData.setAlignment(Alignment.ALIGN_RIGHT);
        label.setLayoutData(layoutData);
        return label;
    }
}

class MyHeaderRenderer implements TableCellRenderer {
    private static final long serialVersionUID = 1L;

    @Override
    public Component getTableCellRendererComponent(
            Table table, Object val, int col, int row) {
        Label label = new Label((String)val);
        TableLayoutData layoutData = new TableLayoutData();
        layoutData.setBackground(new Color(0,200,255));
        layoutData.setAlignment(Alignment.ALIGN_CENTER);
        label.setLayoutData(layoutData);
        return label;
    }
}

 本体部分もヘッダー部分も、レンダラーはいずれもTableCellRendererをimplementsして作成します。このインターフェイスには、「getTableCellRendererComponent」というメソッドが用意されており、ここでセルに表示される内容を作成します。このメソッドでは、呼び出しているTable、表示される値となるObject、列数と行数のint値が引数として渡されており、それらに応じて表示をレンダリングしreturnします。ただし、表示する値は渡されますが、ここで表示するテキストなどを設定しても、実際にはそのとおりには反映されません。値は先ほど作成したテーブルモデルによって管理されるからです。レンダラーは、あくまで表示するセル部分を作成するものです。

 ここでは、新たにLabelを作成し、プロパティ類を設定したものをreturnしています。各種の設定を行う際、「TableLayoutData」というインスタンスを作成し、これに設定を行っています。テーブルのレイアウトは、このように専用クラスを使って設定を行うようになっています。

次のページ
テーブルを作成する

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Javaで軽快に使える「軽量フレームワーク」特集連載記事一覧

もっと読む

この記事の著者

掌田 津耶乃(ショウダ ツヤノ)

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5447 2010/09/24 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング