SHOEISHA iD

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

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

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

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

第10回

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

ソースコードを確認する

 では、初期状態で用意されているファイルを見てみましょう。[Java リソース: src]フォルダを開くと、中に[com.example.myvaadin]というパッケージが用意されており、その中に[MyvaadinApplication.java]というJavaのソースコードファイルが置かれているはずです。これが、サンプルとして用意されるソースコードです。これを開くと、次のように記述されています。

package com.example.myvaadin;

import com.vaadin.Application;
import com.vaadin.ui.*;

public class MyvaadinApplication extends Application {
	@Override
	public void init() {
		Window mainWindow = new Window("Myvaadin Application");
		Label label = new Label("Hello Vaadin user");
		mainWindow.addComponent(label);
		setMainWindow(mainWindow);
	}

}

 生成されているのは「MyvaadinApplication」というクラスです。これは、com.vaadin.Applicationクラスを継承して作成されています。このApplicationは、Vaadinアプリケーションのベースとなるものです。Webアプリケーションにアクセスすると、このApplication継承クラスが呼び出され実行されます。

 ここでは、「init」というメソッドが1つだけ用意されています。これは、クラスが呼び出された際、最初に実行されるもので、必要な初期化処理などを行います。では、ここでは何を行っているのか、ざっと整理しましょう。

Windowインスタンスの用意
Window mainWindow = new Window("Myvaadin Application");

 最初に行っているのは「Window」というクラスのインスタンスを用意することです。ウインドウは、アプリケーションのウインドウとなるコンポーネントです。Vaadinでは、GUIの作成はまずWindowインスタンスを用意し、これに表示するコンポーネントを組み込んでいくのです。そして、最後にそのWindowをメインウインドウとして設定すると、それがWebブラウザのウインドウ内に表示される、という仕組みになっています。

Labelコンポーネントの作成
Label label = new Label("Hello Vaadin user");

 Windowができたら、次に行うのは、このWindowに組み込むコンポーネントの準備です。ここでは「Label」というコンポーネントを1つ作成しています。これは、テキストの表示を行うためのコンポーネントです。引数に、表示するテキストを指定してnewします。

Windowにコンポーネントを組み込む
mainWindow.addComponent(label);

 作成したコンポーネントは、表示したいWindowに組み込みます。これを行っているのが、Windowクラスの「addComponent」です。引数にコンポーネントのインスタンスを渡して呼び出すことで、そのコンポーネントがWindowに組み込まれます。

Windowをメインウインドウに設定する
setMainWindow(mainWindow);

 Windowが完成したら、最後にそれをメインウインドウに設定します。Applicationクラスの「setMainWindow」メソッドを使い、引数にWindowインスタンスを指定することで、そのWindowがメインウインドウとなります。

 こうしてメインウインドウとなったWindowが、実際にレンダリングされWebブラウザに表示されるのです。いかがでしょう、VaadinでのGUI関連の流れが大体わかってきたでしょうか。「Application」「Window」「コンポーネント」という3つの基本的なクラスさえしっかり押さえれば、Vaadinの画面表示を作成するのは、それほど難しいことではありません。

なぜ、MyvaadinApplicationが呼び出されるのか?

 ソースコードの基本がわかったところで、もう1つ、自動生成されている「web.xml」を見てみましょう。ここに、Vaadinの秘密が隠されています。

<?xml version="1.0" encoding="UTF-8"?>
<web-app
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xmlns="http://java.sun.com/xml/ns/javaee"
		xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
		xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
		id="WebApp_ID" version="2.5">
  <display-name>myvaadin</display-name>
  <context-param>
  	<description>Vaadin production mode</description>
  	<param-name>productionMode</param-name>
  	<param-value>false</param-value>
  </context-param>
  <servlet>
  	<servlet-name>Myvaadin Application</servlet-name>
  	<servlet-class>com.vaadin.terminal.gwt.server.ApplicationServlet</servlet-class>
  	<init-param>
  		<description>Vaadin application class to start</description>
  		<param-name>application</param-name>
  		<param-value>com.example.myvaadin.MyvaadinApplication</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>Myvaadin Application</servlet-name>
  	<url-pattern>/*</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    ……略……
  </welcome-file-list>
</web-app>

 一部省略していますが、Vaadinでどのようにクラスが呼び出されているのか、その仕組みを知ることができます。Vaadinには、com.vaadin.terminal.gwt.server.ApplicationServletというサーブレットが用意されており、すべてのアクセスはこのサーブレットに送られるようになっていることが分かります。

 そして、サーブレットへの初期パラメータとして、applicationパラメータの値にcom.example.myvaadin.MyvaadinApplicationを指定しています。ここで、MyvaadinApplicationがApplicationクラスとして使われるように設定されていたのです。これにより、ApplicationServletはMyvaadinApplicationを呼び出し、処理が実行されていたのです。

 ということは、Applicationを継承したクラスを用意し、applicationというパラメータとしてそのクラスを渡せば、MyvaadinApplicationではないクラスを利用することもできる、というわけです。

次のページ
複数コンポーネントをレイアウトする

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

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

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング