SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

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

Javaで軽快に使える「軽量フレームワーク」特集
~リッチなGUIを構築する「Vaadin」(3)

第12回

モデルクラスの作成

 こうしたデータ表示用のコンポーネントでは、各データを管理する「BeanItemContainer」というクラスを介してデータを取得する方法が用意されています。まず、データを管理するモデルクラスを用意します。ここでは「MyData」というクラスとして作成しておきます。

package com.example.myvaadin;

import java.io.Serializable;

public class MyData implements Serializable {
	private String chimei = "";
	private Integer zenki = null;
	private Integer kouki = null;
	private String tantou = "";
	
	public String getChimei() { return chimei; }
	public void setChimei(String chimei) { this.chimei = chimei; }
	public Integer getZenki() { return zenki; }
	public void setZenki(Integer zenki) { this.zenki = zenki; }
	public Integer getKouki() { return kouki; }
	public void setKouki(Integer kouki) { this.kouki = kouki; }
	public String getTantou() { return tantou; }
	public void setTantou(String tantou) { this.tantou = tantou; }

	public MyData(String s1, int n1, int n2, String s2){
		super();
		this.chimei = s1;
		this.zenki = n1;
		this.kouki = n2;
		this.tantou = s2;
	}
}

 見れば分かるように、非常にシンプルなBeanクラスです。Serializableをimplementsしておき、保管するデータはprivateフィールドとして用意しておきます。ここでは、4つのフィールドを用意しておくことにしました。

データコンテナの作成

 続いて、作成したモデルクラス(MyData)を管理するための「BeanItemContainer」クラスを作成します。ここでは「MyDataContainer」というクラスとして定義しましょう。

package com.example.myvaadin;

import java.io.Serializable;
import com.vaadin.data.util.BeanItemContainer;

public class MyDataContainer extends BeanItemContainer<MyData>
		implements Serializable {

	public MyDataContainer()
			throws InstantiationException, IllegalAccessException {
		super(MyData.class);
	}
	
	public static MyDataContainer getContainer()
			throws InstantiationException, IllegalAccessException {
		MyDataContainer container = new MyDataContainer();
		container.addBean(new MyData("東京",12300,45600,"tokyo@honsya"));
		container.addBean(new MyData("大阪",9870,32100,"osaka@sisya"));
		container.addBean(new MyData("名古屋",4560,23400,"nagoya@siten"));
		container.addBean(new MyData("福岡",2980,12120,"fukuoka@siten"));
		container.addBean(new MyData("札幌",1990,23230,"sapporo@siten"));
		return container;
	}
}

 BeanItemContainerをextendsし、やはりSerializableをimplementsしておきます。BeanItemContainerには、モデルクラスのインスタンスを保管する「addBean」というメソッドが用意されています。ここでは「getContainer」というメソッドを用意しておき、ここにサンプルのデータを組み込む処理を用意しておきました。

MyvaadinApplicationを修正する

 では、MyvaadinApplicationクラスを修正し、MyDataContainerを取得してデータをTableに表示するようにしてみましょう。initメソッドを次のように書き換えてください。

public void init() {
	MyDataContainer datasource = null;
	try {
		datasource = MyDataContainer.getContainer();
	} catch (InstantiationException e) {
		e.printStackTrace();
	} catch (IllegalAccessException e) {
		e.printStackTrace();
	}
	Window mainWindow = new Window("Myvaadin Application");
	setMainWindow(mainWindow);
	VerticalLayout layout = (VerticalLayout) mainWindow.getContent();
	layout.setMargin(true);
	layout.setSpacing(true);
	Table table = new Table("※テーブル");
	table.setContainerDataSource(datasource);
	table.setVisibleColumns(new Object[]{"chimei","zenki","kouki"});
	table.setColumnHeaders(new String[]{"地名","前期","後期"});
	table.setWidth("300px");
	table.setHeight("100px");
	layout.addComponent(table);
}
MyDataContainerを取得してTableにデータを表示する
MyDataContainerを取得してTableにデータを表示する

 ここでは、MyDataContainerのgetContainerを呼び出してインスタンスを取得しています。そして、Tableインスタンスを作成後、「setContainerDataSource」を使ってデータソースにMyDataContainerを設定します。これで、MyDataContainerのデータがTableに表示されるようになります。

 さらに、「setVisibleColumns」で表示する列を設定し、「setColumnHeaders」で各列のヘッダーテキストを設定しています。MyDataでは4つのフィールドが用意されていましたが、実際に表示されているのは3列だけです。setVisibleColumnsを呼び出すことで、必要な列だけを表示させることが可能になっているのです。

 これを更に拡張し、データベースにアクセスしてデータを取得し、それをMyDataのBeanとしてMyDataContainerに保管すれば、ダイナミックにデータを取得し表示できるようになります。BeanItemContainerを経由しデータをやり取りするように設計することで、Tableとデータを分離し、自由にデータを構築できるようになっていることがわかるでしょう。

次のページ
フォームの利用

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

Javaで軽快に使える「軽量フレームワーク」特集連載記事一覧

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4943 2010/03/18 14:00

イベント

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

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

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

メールバックナンバー