Boxクラスを使った固定領域の挿入
BoxLayoutを設定したコンテナに配置されるコンポーネント間で、固定サイズで間隔を設定したり、一部のコンポーネントを右寄せにしたり左寄せにしたりする方法を確認します。
コンポーネントを追加していく時に透明なコンポーネントなどを間に挟む事で実現できますが、この透明なコンポーネントを作成するのに便利なものがBoxクラスです。Boxクラスではstaticメソッドがいくつか用意されており、それぞれComponentクラスのオブジェクトを戻り値として取得できるようになっています。
固定サイズの領域を作成する
コンポーネントとコンポーネントの間に固定サイズの隙間を空けたい場合には指定したサイズの透明なオブジェクトをコンポーネントとコンポーネントの間に挟む事で実現できます。この透明で固定サイズのオブジェクトを作成してくれるのがBoxクラスで用意されている「createRigidArea」メソッドです。
public static Component createRigidArea(Dimension d)
常に指定されたサイズである、不可視コンポーネントを生成します。 パラメータ: d - 不可視コンポーネントのサイズ 戻り値: コンポーネント
引数に作成したいコンポーネントのサイズを表すDimensionクラスのオブジェクトを指定します。Dimensionクラスについては『Dimensionクラス』を参照して下さい。戻り値として指定サイズのコンポーネントを取得できます。
実際の使い方は次のようになります。
JPanel p = new JPanel(); p.setLayout(new BoxLayout(p, BoxLayout.PAGE_AXIS)); JButton button1 = new JButton("button1"); JButton button2 = new JButton("button2"); p.add(button1); p.add(Box.createRigidArea(new Dimension(10,10))); p.add(button2);
この場合は10×10ピクセルの透明なコンポーネントを追加しています。結果としてコンポーネントとコンポーネントの間に10ピクセルの隙間を設定することができます。
サンプルプログラム
では簡単なサンプルを作成して試してみます。
import javax.swing.*; import java.awt.Dimension; import java.awt.Font; import java.awt.BorderLayout; public class BoxLayoutTest7 extends JFrame{ public static void main(String[] args){ BoxLayoutTest7 frame = new BoxLayoutTest7(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 300, 200); frame.setTitle("タイトル"); frame.setVisible(true); } BoxLayoutTest7(){ JButton button1 = new JButton("Google"); JButton button2 = new JButton("Yahoo!"); button2.setFont(new Font("Arial", Font.PLAIN, 30)); JButton button3 = new JButton("MSN"); JPanel p = new JPanel(); p.setLayout(new BoxLayout(p, BoxLayout.LINE_AXIS)); p.add(button1); p.add(Box.createRigidArea(new Dimension(10,1))); p.add(button2); p.add(Box.createRigidArea(new Dimension(5,1))); p.add(button3); getContentPane().add(p, BorderLayout.CENTER); } }
上記をコンパイルした後で実行すると次のように表示されます。
コンポーネント間に指定したサイズの隙間が出来ている事が確認できます。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。