こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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);
}

投稿日時 - 2006-11-12 00:08:19

QNo.2533283

すぐに回答ほしいです

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

こんにちは。
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

投稿日時 - 2006-11-12 09:25:05

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

通りすがりなので適当な回答ご容赦ください。

ボタンを2*3で固定したい場合、ボタンを配置する専用のパネルを作って、それのレイアウトをGridLayoutにすると、格子状にコンポーネントを配置できます。
panelname.setLayout(new GridLayout(2,3)); ←例

ボタンの大きさを変えないようにする方法ですが、上記のパネルを貼り付けるコンポーネント(パネルかフレーム)のレイアウトをnullにして、すべて座標で指定するようにすることで解決できます。

いろいろ試してみてください。

投稿日時 - 2006-11-15 02:19:14