質問: new MainPanel(panelW, panelH); add(mainPanel); setVisible(true); } } ``` ``` コード public class MainPanel extends JPanel{ /** * コンストラクタ * @param panelW パネルの幅 * @param panelH パネルの高さ */ public MainPanel(int panelW, int panelH){ setBounds(0,0,panelW, panelH); setBackground(Color.RED); } } ``` 上記のように1000×1000のフレームに500×800のパネルを付け加えたのですがパネルの背景を赤色にしようとするとフレームの範囲だけでなく全体が赤色になりました。 setBounds(0,0,panelW, panelH);で設定しているのですがなぜ全体が赤色になってしまうのでしょうか? よろしくお願いします。
回答: setBoundsを有効にするためには、nullレイアウトという状態にしなければいけません。 JFrameのデフォルトのレイアウトマネージャーはBorderLayoutになりますので、 このままでは思ったようになりません。 BorderLayoutは余白部分があると、そこを目一杯使うというものになりますので、 全体に伸びてしまっているのだと思います。 Gameクラスのコンストラクタに以下を追記してみてください。 場所は、setVisibleより前であればいいと思います。 ``` setLayout(null); ```