トップ 一覧 検索 ヘルプ RSS ログイン

レイアウトの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!! レイアウト

さて、ここまででいくつかのコンポーネントを個々に見てきました。ではアプレットに複数のコンポーネントを配置した場合にはどのような表示になるでしょうか。やってみましょう。

''Sample26.java"
{{pre num
/* <applet code="Sample26.class" width="150" height="100"></applet> */
import java.applet.Applet;
import java.awt.*;

public class Sample26 extends Applet{
    // コンポーネントクラスの変数を定義
    Label label;
    Button button;
    TextField textfield;
    Scrollbar scrollbar;
    Choice choice;
    
    public void init(){
        // 各コンポーネントのオブジェクト作成と初期化
        label = new Label( "Sample26");
        button = new Button( "Push Me!");
        textfield = new TextField( "HELLO, WORLD!!");
        scrollbar = new Scrollbar( Scrollbar.HORIZONTAL, 10, 5, 0, 100);
        choice = new Choice();
        
        // チョイスに項目を追加
        choice.add("chick");
        choice.add("Joh");
        choice.add("tomo");

        // コンポーネントをアプレットのコンテナに追加
        this.add( label);
        this.add( button);
        this.add( textfield);
        this.add( scrollbar);
        this.add( choice);
    }
}
}}

Sample26を実行すると図29のようになります。

{{ref_image fig029.png}}
'''図 29:''' Sample26 実行結果

コンポーネントは追加された順に左上から右下へと配置されていきます。このままではなんとなく見栄えがしませんね。awtパッケージにはコンポーネントの配置を調整するためのレイアウトに関するクラスが用意されています。レイアウトの変更は Applet クラスのメソッド setLayout()で行うことができます。Sample26のレイアウトを変更してみましょう。例としてGridLayoutを試してみます。GridLayoutはコンテナを格子状に等分割し、コンポーネントを配置します。

''Sample27.java''
{{pre num
/* <applet code="Sample27.class" width="150" height="60"></applet> */
import java.applet.Applet;
import java.awt.*;

public class Sample27 extends Applet{
    // コンポーネントクラスの変数を定義
    Label label;
    Button button;
    TextField textfield;
    Scrollbar scrollbar;
    Choice choice;
    
    public void init(){
        // 各コンポーネントのオブジェクト作成と初期化
        label = new Label( "Sample26");
        button = new Button( "Push Me!");
        textfield = new TextField( "HELLO, WORLD!!");
        scrollbar = new Scrollbar( Scrollbar.HORIZONTAL, 10, 5, 0, 100);
        choice = new Choice();
        
        // チョイスに項目を追加
        choice.add("chick");
        choice.add("Joh");
        choice.add("tomo");

        // レイアウトを設定
        this.setLayout( new GridLayout( 2,3));

        // コンポーネントをアプレットのコンテナに追加
        this.add( label);
        this.add( button);
        this.add( textfield);
        this.add( scrollbar);
        this.add( choice);
    }
}
}}

GridLayout クラスのオブジェクトを作成するときに引数にグリッド(格子)の行と列の数を指定できます。いまは 2, 3 と指定したので2行3列の格子になります。

Sample27の実行結果は次のようになります。

{{ref_image fig030.png}}
'''図 30:''' Sample27 実行結果

setLayout() の引数として指定できるレイアウトクラスの主なものを表に挙げておきます。

,レイアウト,説明,
,レイアウト,説明
,BorderLayout,上下左右・中央を指定して配置する。
,GridLayout,コンポーネントを格子状にレイアウトする。
,FlowLayout,コンポーネントを一単語にみたてて、英文の文章のように配置する。
'''表 11:''' 主なレイアウト

アプレットのデフォルトのレイアウトはFlowLayoutです。本書で使うことが多いのは、BorderLayout および GridLayout です。GridLayoutは上で挙げたように格子状の配置になります。

BorderLayout についても説明しておきましょう。BorderLayoutはコンテナを図31のように分割し、それぞれの領域をNORTH, WEST, SOUTH, EAST, CENTER と呼びます。

{{ref_image fig031.png}}
'''図 31:''' BorderLayout (概念図)

私たちはコンポーネントをどこに配置するかを、このNORTH, WEST, SOUTH, EAST, CENTERというワードを使って指定することができます。例を見てみることにしましょう。5つのボタンをそれぞれの位置に配置するプログラムを書いてみます。

{{pre num
/* <applet code="Sample28.class" width="150" height="150"></applet> */
import java.applet.Applet;
import java.awt.*;

public class Sample28 extends Applet{
    public void init(){
        // レイアウトを設定
        this.setLayout( new BorderLayout());
        
        // コンポーネントを追加
        this.add( new Button("NORTH"), BorderLayout.NORTH);
        this.add( new Button("WEST"), BorderLayout.WEST);
        this.add( new Button("SOUTH"), BorderLayout.SOUTH);
        this.add( new Button("EAST"), BorderLayout.EAST);
        this.add( new Button("CENTER"), BorderLayout.CENTER);
    }
}
}}

8行目でレイアウトをBorderLayoutに設定しています。そして11行目から15行目でコンポーネントを追加していますが、追加の際に使うadd() メソッドの引数に追加位置を表す定数が増えていることに注意して下さい。BorderLayout ではこのようにして位置を指定することができます。

Sample28の実行結果は図32のようになります。

{{ref_image fig032.png}}
'''図 32:''' Sample28の実行結果