• ベストアンサー

JButtonの配置

FlowLayoutによって、JFrameにボタン6個を2×3に配列するプログラムを考えています。ボタンを配置することはできたのですが、ウインドウの大きさを変えるとボタンが3×2になったりと変更してしまいます。 ウインドウの大きさを変えても、ボタンの大きさは変えず、ボタン6個が2×3配列になるプログラムはどうしたらよいのでしょうか?以下は、途中のプログラムです。 import java.awt.*; import javax.swing.*; public class sample { public static void main(String[] args){ MyFrame frame = new MyFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } public class MyFrame extends JFrame { public static final int WIDTH = 200; public static final int HEIGHT = 300; public MyFrame(){ setSize(WIDTH,HEIGHT); Container contentPane = getContentPane(); MyPanel panel = new MyPanel(); contentPane.add(panel); } } public class MyPanel extends JPanel{ public static final int MESSAGE_X = 200; public static final int MESSAGE_Y = 200; setLayout(new FlowLayout()); JButton button1 = new JButton("Button1"); contentPane.add(button1); JButton button2 = new JButton("Button2"); contentPane.add(button2); JButton button3 = new JButton("Button3"); contentPane.add(button3); JButton button4 = new JButton("Button4"); contentPane.add(button4); JButton button5 = new JButton("Button5"); contentPane.add(button5); JButton button6 = new JButton("Button6"); contentPane.add(button6); }

質問者が選んだベストアンサー

  • ベストアンサー
  • koki_m
  • ベストアンサー率83% (45/54)
回答No.1

こんにちは。 BoxLayoutというレイアウトマネージャを使えばできると思います。 1.MyFrameのレイアウトマネージャをFlowLayoutに変更します。   contentPane.setLayout(new FlowLayout(FlowLayout.LEFT)); // 左上に表示される 2.MyPanelをさらに内部で「左ボタン3つ」と「右ボタン3つ」の2つのパネルに分割します。 3.MyPanelと、その内部の2つのパネルのレイアウトマネージャにBoxLayoutを使用します。 ================================================== class MyPanel extends JPanel{ public MyPanel() { setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); setBorder(BorderFactory.createLineBorder(Color.RED)); // 確認のため JPanel sub1 = new JPanel(); sub1.setLayout(new BoxLayout(sub1, BoxLayout.Y_AXIS)); JButton button1 = new JButton("Button1"); sub1.add(button1); sub1.add(Box.createVerticalStrut(5)); JButton button2 = new JButton("Button2"); sub1.add(button2); sub1.add(Box.createVerticalStrut(5)); JButton button3 = new JButton("Button3"); sub1.add(button3); JPanel sub2 = new JPanel(); sub2.setLayout(new BoxLayout(sub2, BoxLayout.Y_AXIS)); JButton button4 = new JButton("Button4"); sub2.add(button4); sub2.add(Box.createVerticalStrut(5)); JButton button5 = new JButton("Button5"); sub2.add(button5); sub2.add(Box.createVerticalStrut(5)); JButton button6 = new JButton("Button6"); sub2.add(button6); add(sub1); add(Box.createHorizontalStrut(10)); add(sub2); } } ================================================== sub1.add(Box.createVerticalStrut(5));などはコンポーネントの間隔です。 間隔もコンポーネントとして挿入するという感じです。

参考URL:
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/javax/swing/BoxLayout.html

その他の回答 (1)

  • msnc31
  • ベストアンサー率31% (7/22)
回答No.2

通りすがりなので適当な回答ご容赦ください。 ボタンを2*3で固定したい場合、ボタンを配置する専用のパネルを作って、それのレイアウトをGridLayoutにすると、格子状にコンポーネントを配置できます。 panelname.setLayout(new GridLayout(2,3)); ←例 ボタンの大きさを変えないようにする方法ですが、上記のパネルを貼り付けるコンポーネント(パネルかフレーム)のレイアウトをnullにして、すべて座標で指定するようにすることで解決できます。 いろいろ試してみてください。

関連するQ&A