SHOEISHA iD

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

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

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

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

第10回

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

モーダルウインドウを作る

 では、この内部ウインドウを少し修正し、モーダルウインドウとして表示させてみましょう。Windowクラスには、ウインドウの属性に関する多数のメソッドが用意されています。それらを設定することで、ウインドウの性質をいろいろと変更できます。

package com.example.myvaadin;

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

public class MyvaadinApplication extends Application {
	Window mainWindow = null;
	
	@Override
	public void init() {
		mainWindow = new Window("Myvaadin Application");
		VerticalLayout layout = (VerticalLayout)mainWindow.getContent();
		layout.setMargin(true);
		layout.setSpacing(true);
		Label h1 = new Label("<h1>Vaadin Sample</h1>",Label.CONTENT_XHTML);
		layout.addComponent(h1);
		Button button = new Button("クリック");
		button.addListener(new Button.ClickListener() {
			@Override
			public void buttonClick(ClickEvent event) {
				addSubWindow();
			}
		});
		mainWindow.addComponent(button);
		setMainWindow(mainWindow);
	}
	
	public void addSubWindow(){
		final Window subWindow = new Window("Sub Window");
		subWindow.setWidth("200px");
		subWindow.setHeight("100px");
		subWindow.setPositionX(100);
		subWindow.setPositionY(100);
		subWindow.setClosable(false);
		subWindow.setResizable(false);
		subWindow.setModal(true);
		VerticalLayout layout = (VerticalLayout)subWindow.getContent();
		Label sublabel = new Label("This is Sub Window.");
		layout.addComponent(sublabel);
		Button subbtn = new Button("Close");
		subbtn.addListener(new Button.ClickListener() {
			
			@Override
			public void buttonClick(ClickEvent event) {
				mainWindow.removeWindow(subWindow);
			}
		});
		layout.addComponent(subbtn);
		layout.setComponentAlignment(subbtn, Alignment.BOTTOM_CENTER);
		mainWindow.addWindow(subWindow);
	}
}
ボタンをクリックすると、ウインドウがモーダルで表示される。閉じるまで他の操作はできなくなる。
ボタンをクリックすると、ウインドウがモーダルで表示される。閉じるまで他の操作はできなくなる。

 ボタンをクリックすると、内部ウインドウが現れますが、これはモーダルになっており、ウインドウを閉じるまでウインドウ外の操作をすることができません。またウインドウサイズも変更できませんし、クローズボックスもなくなり閉じられなくなっています。ボタンの[Close]ボタンをクリックすればウインドウは閉じられます。

Windowの設定について

 では、addSubWindowでどのような作業をしているのか見てみましょう。ここでは、次のようなメソッドを呼び出してウインドウの属性を変更しています。

  • setClosable:ウインドウを閉じられるかどうかを真偽値で指定します。falseにするとクローズボックスが表示されなくなります
  • setResizable:ウインドウの大きさを変更できるかどうかを真偽値で指定します。falseにすると、ウインドウの右下をドラッグしてリサイズできなくなります
  • setModal:モーダルにするかどうかを真偽値で指定します。trueにすると、ウインドウを閉じるまでそれ以外の操作ができなくなります

 ウインドウ関係の設定をするだけで、このように簡単にモーダルなウインドウを作ることができます。Windowを1つ使えるようになるだけで、ずいぶんと面白い表示が簡単に作れるようになりそうです。

終わりに

 今回は、Vaadinのごく基本的なコンポーネントを使ってみました。ほんの導入部分だけでしたが、VaadinがどのようにWebアプリケーションを作成するのか、なんとなくイメージできたのではないでしょうか。

 Vaadinを使い始めて間もないうちは、どうしても頭の中で「HTMLのこれこれの機能を実現するには、どういう機能が用意されているのだろうか」といった目で見てしまいます。しかし、実際に使っていくうちに、これはWebページというより、AWTなどを使ったGUIアプリケーションを作成しているのに近いものであることが分かるでしょう。

 何しろ、Vaadinでは、HTMLの出番はまったくありません。スタイルシートすら、ここまで一度も登場しませんでした。またWeb作成でありがちな「まずはフォームを作って送信してみましょう」といったことも一切ありません。サンプルとしてボタンを作り、イベント処理を組み込みましたが、これはHTMLでのフォーム送信とはまったく別物であることは説明するまでもないでしょう。

 実際には、ボタンをクリックした際に、Ajaxを使ってサーバ側とやりとりを行い処理が実行されているのですが、Vaadinではそうした部分はきれいに隠蔽され、プログラムを作っている人間には存在が見えなくなっています。プログラマは、ただごく普通のスタンドアロンなGUIアプリケーションを作るのとまったく同じ感覚でプログラムを作ればいいのです。「Webの開発をしていることを忘れてしまう」、Vaadinが目指しているのは、そういう開発スタイルかもしれません。

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

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

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング