目次> 第3章> 3.2 TOPUPPREVNEXT

3.2 GridLayout

GridLayout を用いて、ラベルを格子状にならべてみましょう。

プログラム MyProfile.java を 適当なフォールダにダウンロードしてください。

下図の中の赤字の部分が、前節の MyAddress.java との違いです。

 001:// 住所・氏名・所属 の表示(その1)
 002:
 003:import java.awt.* ;
 004:import javax.swing.* ;
 005:
 006:public class MyProfile extends JFrame {
 007:
 008:    public MyProfile() {
 009:        super("私の住所");
 010:        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 011:        Container pane = getContentPane();
 012:        pane.setLayout( new GridLayout(0, 2) );
 013:
 014:        pane.add( new JLabel("氏名:") );
 015:        pane.add( new JLabel("藤村 光") );
 016:        pane.add( new JLabel("住所:") );
 017:        pane.add( new JLabel("相模原市御園") );
 018:        pane.add( new JLabel("") );
 019:        pane.add( new JLabel("4丁目6−8") );
 020:        pane.add( new JLabel("所属:") );
 021:        pane.add( new JLabel("情報処理教育室") );
 022:
 023:        pack();
 024:        setVisible(true);
 025:    }
 026:
 027:    public static void main(String[] args) {
 028:        new MyProfile();
 029:    }
 030:}

クラス名を MyProfile にしたため、 プログラム名とコンストラクタ名も変更になっています。

クラス名の定義(6行目)や、コンストラクタ名の定義(8行目)だけを変更し、 クラスを参照している個所(28行目)の変更を忘れて MyAddress のままにしておくと、 コンパイラは同一フォールダ内を探します。 フォールダ内に MyAddress の定義がなければエラーが表示されますが、 MyAddress.class がフォールダ内にあるとそれが使われます。 MyAddress.java があれば勝手にコンパイルをします。 この場合、このプログラムの8行目から25行目はまったく使われないことになります。

12行目で、 クラス GridLayout のインスタンスを指定しています。 GridLayout には若干ややこしい規則があるのですが、

GridLayout( 行数 , 列数 )
といった形の指定をします。 このプログラムでは、8個のラベルを貼り付けていますので、縦4行、横2列に配置されます。

GridLayout についてもう少し詳しい説明は、 Appendix F java.awt.GridLayout にあります。

14〜21行目で複数のラベルを pane に貼り付けています。 4×2の領域に、左から右、上から下へと順に貼りつけられます。 順次貼り付けられますから、間を空けたければ18行目のように、空のラベルを貼り付けます。

コンパイルし、実行してみましょう。実行すると下図のようなウィンドウが表示されます。

MyProfile-1.gif

ウィンドウの大きさをかえても、4×2 の配置は変わりません。 また、8個のラベルは全て同一の形状になります。

ウィンドウを広げると何が起こるのかを、もう少し詳しく見てみましょう。 JLabel に 枠をつけて表示し(下図左)、 ウィンドウを広げてみます(下図右)。

枠つき GridLayout MyProfileZZ-1.gif 広げて表示

枠つき表示 MyProfileZZ.java

内側の ラベル自体が 広がっていることがわかります。

FlowLayout では、ウィンドウの大きさの変化が内側の JLabel に伝わりません。

MyAddressZZ-1.gif

MyAddressZZ-2.gif
MyAddressZZ-3.gif MyAddressZZ-4.gif

枠つき表示 MyAddressZZ.java

GridLayout の場合も、貼り付けるラベルの間隔を指定できます。 横方向の間隔を 5ドット、 縦方向の間隔を 10ドットにしみましょう。

GridLayout with gap

MyProfileZZ2-2.gif


ギャップ指定のGridLayout MyProfileZZ2.java

更新日:2006/04/04 TOPUPPREVNEXT