座標指定で配置する
まずレイアウトマネージャーを無効にする方法を確認します。無効にするにはコンテナに対し、JPanelクラスやJFrameクラスの親クラスであるContainerクラスで用意されている「setLayout」メソッドを実行する時に引数に「null」を設定します。
JPanel p = new JPanel();
p.setLayout(null);
これでコンテナにデフォルトで設定されているレイアウトマネージャーが無効となりました。
レイアウトマネージャーが無効となると、コンポーネントを配置しても位置やサイズに関する調整をまったく行わなくなりますのでコンテナの中のどの位置に配置するのかやサイズをどうするのかを別途メソッドを使って指定します。
例えばほとんどのコンポーネントの親クラスであるComponentクラスで用意されている「setBounds」メソッドを使って位置及びサイズを指定してみます。
public void setBounds(int x, int y, int width, int height)
このコンポーネントを移動し、サイズ変更します。左上隅の新しい位置は x お よび y によって指定され、新しいサイズは width および height によって指 定されます。 パラメータ: x - このコンポーネントの新しい x 座標 y - このコンポーネントの新しい y 座標 width - このコンポーネントの新しい width height - このコンポーネントの新しい height
1番目と2番目の引数で座標を指定し、3番目と4番目の引数でサイズを指定します。
実際の使い方は次のようになります。
JPanel p = new JPanel(); p.setLayout(null); JButton button = new JButton("button"); button.setBounds(10, 10, 100, 50); p.add(button);
サンプルプログラム
では簡単なサンプルを作成して試してみます。
import javax.swing.*; import java.awt.BorderLayout; public class NullLayoutTest1 extends JFrame{ public static void main(String[] args){ NullLayoutTest1 frame = new NullLayoutTest1(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 300, 200); frame.setTitle("タイトル"); frame.setVisible(true); } NullLayoutTest1(){ JPanel p = new JPanel(); p.setLayout(null); JButton button1 = new JButton("Google"); button1.setBounds(10, 10, 80, 30); JButton button2 = new JButton("Yahoo!"); button2.setBounds(30, 30, 80, 30); JButton button3 = new JButton("MSN"); button3.setBounds(50, 50, 80, 30); p.add(button1); p.add(button2); p.add(button3); getContentPane().add(p, BorderLayout.CENTER); } }
上記をコンパイルした後で実行すると次のように表示されます。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。