1. ホーム
  2. java

[解決済み] Java Swing JPanelのサイズ設定

2022-01-31 06:37:45

質問事項

このjava swing guiのコードでどこが間違っているのか、どなたかご指摘ください。私は2つのボタンをJPanelに追加し、サイズを設定した後にフレームに追加しようとしています。 setSize の値が渡されます。

public Test() {
    GridLayout layout = new GridLayout(1, 2);
    //this.setLayout(layout);
    this.setSize(700, 700);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    buttonPanel = new JPanel();
    buttonPanel.setSize(new Dimension(30, 100));

    JButton rectButton = new JButton("Rectangle");
    JButton ovalButton = new JButton("Oval");
    buttonPanel.add(rectButton);
    buttonPanel.add(ovalButton);
    this.add(buttonPanel);
    this.add(new PaintSurface());
    this.setVisible(true);  
}

解決方法は?

即答できないかもしれませんが......。

GridLayout layout = new GridLayout(1, 2);
this.setLayout(layout);
// You're original code...
// Why are you using `BorderLayout.CENTER` on a `GridLayout`
this.add(new PaintSurface(), BorderLayout.CENTER);

レイアウトを設定するのは GridLayout を使用していますが BorderLayout の制約で、コンポーネントの1つを適用するのですか?

また、以下のような呼び出しがないことを確認してください。 Test#pack の値を上書きしてしまいます。 setSize

UPDATED (質問の変更から)

のデフォルトのレイアウトマネージャは JFrameBorderLayout を呼び出しているにもかかわらず buttonPanel.setSize レイアウトマネージャによってオーバーライドされ始めている可能性があります。

を読んでみてください。 レイアウトマネージャーのビジュアルガイド レイアウトマネージャーの使い方 をご覧いただき、お客様のご要望に合ったレイアウトマネージャーをお探しください。

1つも見つからない場合は、レイアウトマネージャーの異なる複合コンポーネントを使用し、実現したいレイアウトに近づけることを検討してください。