制約を使ってサイズを設定する

広告

制約は位置を設定するためだけではなくコンポーネントのサイズも設定することが出来ます。

例えばコンテナを基準に制約を設定する場合で考えます。対象のコンポーネントの左端をコンテナの左端からの距離で設定すると同時にコンポーネントの右端をコンテナの右端からの距離で設定すると、コンポーネントの左端と右端の位置が指定されるため結果的にコンポーネントのサイズが確定します。

実際の使い方は次のようになります。

SpringLayout layout = new SpringLayout();
JPanel p = new JPanel();
p.setLayout(layout);

JButton button1 = new JButton("button1");

layout.putConstraint(SpringLayout.NORTH, button1, 10, SpringLayout.NORTH, p);
layout.putConstraint(SpringLayout.WEST, button1, 10, SpringLayout.WEST, p);
layout.putConstraint(SpringLayout.EAST, button1, -10, SpringLayout.EAST, p);

p.add(button1);

サンプルプログラム

では簡単なサンプルを作成して試してみます。

SpringLayoutTest3.java

import javax.swing.*;
import java.awt.Font;
import java.awt.BorderLayout;

public class SpringLayoutTest3 extends JFrame{

  public static void main(String[] args){
    SpringLayoutTest3 frame = new SpringLayoutTest3();

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(10, 10, 300, 200);
    frame.setTitle("タイトル");
    frame.setVisible(true);
  }

  SpringLayoutTest3(){
    SpringLayout layout = new SpringLayout();
    JPanel p = new JPanel();
    p.setLayout(layout);

    JButton button1 = new JButton("Google");
    JButton button2 = new JButton("Yahoo!");
    button2.setFont(new Font("Arial", Font.PLAIN, 30));

    layout.putConstraint(SpringLayout.NORTH, button1, 50, SpringLayout.NORTH, p);
    layout.putConstraint(SpringLayout.WEST, button1, 10, SpringLayout.WEST, p);
    layout.putConstraint(SpringLayout.EAST, button1, -10, SpringLayout.EAST, p);

    layout.putConstraint(SpringLayout.NORTH, button2, 100, SpringLayout.NORTH, p);
    layout.putConstraint(SpringLayout.WEST, button2, 10, SpringLayout.WEST, p);
    layout.putConstraint(SpringLayout.EAST, button2, -10, SpringLayout.EAST, p);

    p.add(button1);
    p.add(button2);

    getContentPane().add(p, BorderLayout.CENTER);
  }
}

上記をコンパイルした後で実行すると次のように表示されます。

SpringLayoutで制約を使ってサイズを設定する

今回は2つのコンポーネントの左辺及び右辺の位置を、どちらもコンテナからの距離で同じ値を使って指定しました。その結果2つのコンポーネントの横幅は同じサイズに設定されています。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)