GoogleからJava開発者へのサプライズ!な贈り物、Google Web Toolkit[2]
GWTとYahoo!のAPIを使って画像検索アプリ!
リトルソフト株式会社 長尾寿宏
2006/7/12
レイアウトの概要・構造 |
さて、今回作成するユーザーインターフェイスですが、以下の図のようにウィジェットとパネルで構成することにしました。
図2 ウィジェットとパネルの構成 |
ウィジェットやパネルを組み合わせてユーザーインターフェイス構築する作業は、シンプルなJavaプログラミングが中心となります。これらは、Swing、AWT、SWTを理解しているプログラマにとっては非常になじみやすく、また、Javaにあまり深い知識がないプログラマでも容易に習得できるレベルといえます。
前記[GWTプロジェクトの作成]で、すでにjp.littlesoft.gwttest1.client.ImageSearchClientクラスのスケルトンコードが、applicationCreatorによって生成されていますので、これを編集して、目的とするユーザーインターフェイスを完成させていきましょう。
まず、各ウィジェットのインスタンスを生成し、次にそれぞれの階層関係をメソッドで登録していきます。
※なお、日本語を使用するためには、JavaソースファイルをUTF-8形式で書き出す必要があります。作業を開始する前に、EclipseのJavaソースファイル出力エンコーディングをUTF-8に設定しておいてください。 |
(中略) |
(1) RootPanel
GWTウィジェットを埋め込む対象となるパネルです。これはアプリケーション内で任意に作成できるオブジェクトではなく、RootPanel.get()という静的メソッドで取り出します。このメソッドで引数を指定しない場合、返されるのはbody要素に対応したオブジェクトとなります。ほとんどのアプリケーションは、そのonModuleLoadメソッドの中で、RootPanelにアクセスし、GWTウィジェットの登録を行います。
当アプリケーションでは、以下のコードで、RootPanelへDockPanelのインスタンスを登録しています。
public void onModuleLoad() { (中略) RootPanel.get().add(dockPanel); (中略) } |
(2) DockPanel
RootPanel上に登録されたDockPanelは幅、高さともに“100%”の大きさが指定されます。下記setSizeメソッドの引数が文字列である点に注意してください。GWTウィジェットはsetWidth()、 setHeight()、そしてsetSize() を使用することで、サイズを明示的に設定することが可能ですが、これらのメソッドへの引数は整数ではなく文字列のため、画素(128px)や、センチメートル(3cm)や、割合(100%)など、CSSで有効なあらゆる大きさ指定を設定することができます。
dockPanel.setSize("100%","100%"); |
DockPanelは、中央とその周囲の東西南北を指定し、パネルやウィジェットをレイアウトすることができます。当アプリケーションでは中央に検索したページを表示するFrameを置き、北にヘッダーを構成するHorizontalPanel、南にフッターを構成するHorizontalPanel、西に検索結果一覧を表示するScrollPanelを配置しています。
以下のコードでは、東、西、南、北、そして中央の区画を指定して、dockPanelへ子ウィジェットを登録しています。同時に、各区画の中での子ウィジェットの水平位置、垂直位置が指定されています。
public void onModuleLoad() { (中略) dockPanel.add(header, DockPanel.NORTH ); (中略) dockPanel.add(footer, DockPanel.SOUTH ); (中略) dockPanel.add(resultGridScroll, DockPanel.WEST ); (中略) } |
(3) HorizontalPanel
HorizontalPanelは子ウィジェットを水平に並べて配置することができます。当アプリケーションではヘッダーやフッターの構造を定義するため、DockPanelの北と南に配置されています。ヘッダーには2つのラベル、テキストボックス、ボタンといった子ウィジェットが追加され、水平に自動レイアウトされています。
header.add(label1); |
また、HorizontalPanelの中での子ウィジェットの水平位置は以下のように設定します。
header.setCellVerticalAlignment(label1, HorizontalPanel.ALIGN_MIDDLE); |
(4) Label、 TextBox、 Button
Labelは文字列を表示するウィジェットで、実際には<div>で囲まれたHTMLテキストとなります。TextBox、ButtonはおなじみのHTML入力コンポーネントです。各ウィジェットには個別に大きさ指定をすることも可能です。
keyword.setWidth("240px"); |
(5) ScrollPanel
ScrollPanelは、名前のとおり、スクロール付きのパネルで、内部に設定したウィジェットをスクロールさせることができます。当アプリケーションのスクロールする対象はGridです。これは以下のように指定されています。
(中略) Grid resultGrid = new Grid(0,4); (中略) dockPanel.add(resultGridScroll, DockPanel.WEST ); (中略) |
(6) Grid
Girdは<table>を利用したシンプルなレイアウトを提供します。当アプリケーションでは、画像検索結果(通し番号、サムネール画像、要約文)を一覧表示します。ここではいまだ、実際に表示する内容は設定せず、tableタグに関連するプロパティ設定と初期状態を非表示にする設定のみ行っておきます。
(中略)resultGrid.setCellSpacing(0); (中略) |
(7) Frame
Frameは<iframe>に対応するウィジェットです。当アプリケーションでは、画像検索結果一覧で選択された画像を参照しているHTMLコンテンツを表示させる領域として使用します。
3/5 |
INDEX |
||
GWTとYahoo!のAPIを使って画像検索アプリ! | ||
Page1<Yahoo!Web検索サービスとGWTを使ってみよう/画像検索アプリケーション/アプリケーションの構成> | ||
Page2<開発環境としてGWT、Eclipse、JDKを準備しよう/YahooアプリケーションIDの取得//GWTプロジェクトの作成/標準パッケージレイアウト/クライアント側のユーザーインターフェイス作成/ウィジェットとパネル> | ||
Page3<レイアウトの概要・構造(1) RootPanel(2) DockPanel(3) HorizontalPanel(4) Label、 TextBox、 Button(5) ScrollPanel(6) Grid(7) Frame> | ||
Page4<CSSによる外観設定/ホストページの編集> | ||
Page5<ウィジェットの自動リサイズ機能の実装/ホステッドモードで実行してみる/Swing、AWT、SWTプログラマになじみやすい> |
Ajax関連記事 |
Ajaxフレームワーク「Spry」で作る「リンク集2.0」 特集:AdobeのAjaxフレームワーク「Spry」を使ってみよう アドビのAjaxフレームワーク「Spry」。さっそく簡単なリンク集のサンプルを作成しながら、その機能を探ってみよう 「リッチクライアント & 帳票」フォーラム 2006/6/21 |
古くて新しいAjaxの真実を見極める 「Webインターフェイスの新しい手法」「画期的なWebアプリケーションの仕組み」であるとして開発者たちの人気を集めるAjaxとは何なのか、その真実を見極めてみよう 最終更新 2005/8/2 |
- GASで棒、円、折れ線など各種グラフを作成、変更、削除するための基本 (2017/7/12)
資料を作る際に、「グラフ」は必要不可欠な存在だ。今回は、「グラフの新規作成」「グラフの変更」「グラフの削除」について解説する - GET/POSTでフォームから送信された値をPHPで受け取る「定義済みの変数」【更新】 (2017/7/10)
HTMLのフォーム機能についておさらいし、get/postメソッドなどの内容を連想配列で格納するPHPの「定義済みの変数」の中身や、フォーム送信値の取り扱いにおける注意点について解説します【PHP 7.1含め2017年の情報に合うように更新】 - PHPのfor文&ループ脱出のbreak/スキップのcontinue【更新】 (2017/6/26)
素数判定のロジックからbreak文やcontinue文の利点と使い方を解説。for文を使ったループ処理の基本とwhile文との違い、無限ループなども併せて紹介します【PHP 7.1含め2017年の情報に合うように更新】 - Spreadsheetデータの選択、削除、挿入、コピー、移動、ソート (2017/6/12)
Spreadsheetデータの選択、挿入、削除、コピー、移動、ソートに使うメソッドの使い方などを解説する
|
|