• 検索結果がありません。

コンポーネントの配置

第 4 章 ユーザーインタフェースの設計

4.1 高レベルUIコンポーネントによるプログラミング

4.1.4 コンポーネントの配置

開発者は、コンポーネントの配置をレイアウトマネージャに任せるか、レイアウトマネージャを無 効にして Component クラスの setLocation()メソッドでコンポーネントごとに配置位置を指定 するかを選択することができます。

レイアウトマネージャは Panel に設定して使用します。 Panel にレイアウトマネージャを設定す るには、Panel.setLayoutManager()メソッドを使用します。

iアプリ実行環境で用意されているレイアウトマネージャには、Panel を生成した初期状態で設 定されているデフォルトレイアウトマネージャと、 HTML 風の指定方法によりレイアウトを行うた めの HTML レイアウトマネージャの 2 つがあります。

デフォルトレイアウトマネージャの基本レイアウト方針は、シンプルなフローレイアウトです。パ

ネルに追加されたコンポーネントは画面の左から右に向けて順次横並びに配置されていき、画面の

Copyright Ⓒ 2008-2012 NTT DOCOMO, Inc. All Rights Reserved.

横幅で収まりきらなくなった時点で次のコンポーネント配置が可能な位置(1 段下の列)へと配置 されます。

また HTML レイアウトマネージャでは、コンポーネントを Panel に追加していく過程で改行(BR タグに相当)、段落(P タグに相当)、アライメント(CENTER や DIV タグなどに相当)を指定 することで、開発者がより明示的にレイアウトを指示することができます。

どのメーカーの携帯電話にも適用できる汎用的なiアプリを作成するためには、コンポーネントの レイアウト構成をシンプルに保つことを推奨します。なお、配置可能なコンポーネントの数は、メ モリ使用状況や各機種固有の制限などの影響を受けます。

注意事項:

● LayoutManagerインタフェースはメーカーがレイアウトマネージャを実装するために用意されているもの であり、開発者が本インタフェースを利用して独自のレイアウトマネージャを作成することはできません。

PanelオブジェクトのsetLayoutManager()メソッドを呼び出すことで、そのPanelが使用するレイア ウトマネージャを変更することができます。

● レイアウトマネージャを無効にするには、Panelオブジェクトに対して、パラメータにnullを指定して setLayoutManager()メソッドを呼び出します。レイアウトマネージャを無効にした場合、アプリケーシ ョンプログラムは各コンポーネントのsetLocation()メソッドを使用して、コンポーネント毎にそれを配 置する位置を指定します。なお、レイアウトマネージャを無効にした場合、機種によってはスクロール機能 に制限が発生します。

● 1つのHTMLレイアウトマネージャオブジェクトは、2つ以上のPanelに同時に設定することはできません。

1つのiアプリの中にHTMLレイアウトを適用したいPanelが複数ある場合には、それぞれのPanelに対 し別々のHTMLレイアウトマネージャオブジェクトを割り当てるようにしてください。

● HTMLレイアウトマネージャは、setLayoutManager()メソッドでPanelに設定される度に初期状態(ア ライメントが左寄せで改行、段落指定のない状態)に戻ります。

次のコードは、 HTML レイアウトマネージャを使用してコンポーネントの配置を行う例を示したも のです。

例: HTML レイアウトマネージャによるコンポーネントの配置

import com.nttdocomo.ui.*;

public class HTMLLayoutDemo extends UIDemoPanel {

Label label1, label2, label3, label4;

HTMLLayout lm;

HTMLLayoutDemo() {

label1 = new Label("Label 1");

label2 = new Label("Label 2");

label3 = new Label("CENTER");

label4 = new Label("RIGHT");

// HTMLレイアウトマネージャを生成し、Panelに設定する。

lm = new HTMLLayout();

setLayoutManager(lm);

// レイアウトを指定しつつPanelにLabelを追加する。

add(label1);

//以降のコンポーネントは次行に配置する(BRタグ相当)。

lm.br();

Copyright Ⓒ 2008-2012 NTT DOCOMO, Inc. All Rights Reserved.

add(label2);

// 以降のコンポーネントは次行に配置する(BRタグ相当)。

lm.br();

// begin()から対応するend()までの間に追加されたコンポーネントを

// 中央寄せで表示する。

lm.begin(HTMLLayout.CENTER);

add(label3);

lm.end();

// begin()から対応するend()までの間に追加されたコンポーネントを

// 右寄せで表示する。

lm.begin(HTMLLayout.RIGHT);

add(label4);

lm.end();

} }

また次のコードは、レイアウトマネージャを無効化して、アプリケーションプログラムが独自にコ ンポーネントの配置を行う例を示したものです。

例: setLocation()によるコンポーネントの配置

import com.nttdocomo.ui.*;

public class NullLayoutDemo extends UIDemoPanel { Button button1, button2;

Button offScreen;

TextBox text;

Label title, button1Label, button2Label;

NullLayoutDemo() {

// ここですべてのコンポーネントを使用する。

title = new Label("Null Layout ");

button1 = new Button("Button1");

button2 = new Button("Button2");

button1Label = new Label("ONE:");

button2Label = new Label("TWO:");

text = new TextBox("A simple sentence in a textbox", 40, 2, TextBox.DISPLAY_ANY);

/*

* 画面外に配置するコンポーネントの例としてこのボタンを作成する。

*/

offScreen = new Button("This button is never seen");

/*

* ここでレイアウトマネージャにnullを設定する。したがって、個々のコンポー

* ネントの場所を設定する必要がある。注: 物理的な画面の座標外に配置される

* コンポーネントは全く表示されない。nullレイアウトにより、スクロールは無効に

* される場合がある。

*/

setLayoutManager(null);

/* 注: この場合でも、コンポーネントを追加する順序には意味がある。コンポーネントは、

* この順序に従ってフォーカスを与えられる。

*/

add(title);

Copyright Ⓒ 2008-2012 NTT DOCOMO, Inc. All Rights Reserved.

add(button1Label);

add(button1);

add(button2Label);

add(button2);

add(text);

// このコンポーネントも追加する。

add(offScreen);

/*

* ここで、各コンポーネントの場所を設定する必要がある。つまり、パネルのレイアウト

* を独自に指定する。コンポーネントのサイズは自動的に設定することも、setSizeを * 直接呼び出してサイズを指定することもできる。

*/

title.setLocation(12, 0);

button1Label.setLocation(10, 18);

button1.setLocation(45, 18);

button2Label.setLocation(10, 40);

button2.setLocation(45, 40);

text.setLocation(2, 60);

/*

* 注: このボタンは画面外に配置される。したがって、表示もされないし、フォーカスを

* 得ることもない。

*/

offScreen.setLocation(1000, 1000);

} }

【DoJa-2.0】

HTMLレイアウトマネージャ(HTMLLayoutクラス)はDoJa-2.0プロファイルにて新設されました。