Java Swing布局混乱/困难

时间:2012-10-12 07:09:35

标签: java swing layout border-layout nestedlayout

我仍在尝试在JavaSwing中找出BorderLayout,这真的令人沮丧。

我希望能够将窗格拆分为3个包含的子面板,但我不完全确定如何包含它。

这是我的类Game,它包含面板ControlPanel,StatePanel和Board(实际上只是JPanel的扩展)。我想将面板分成这三个部分,如下所示: simple picture

到目前为止,这是我的代码:

public class Game extends JPanel {
    private int panespace=2;
    private JPanel ControlPanel;
    private JPanel StatePanel;
    private Board board;
    public Game()
    {
         setLayout(new BorderLayout(panespace, panespace));
         ControlPanel=new JPanel();
         ControlPanel.setLayout(new BorderLayout(panespace, panespace));
         ControlPanel.setBorder(new LineBorder(Color.red, 10));
         ControlPanel.setSize(100,100);
         super.add(ControlPanel, BorderLayout.EAST);
         StatePanel=new JPanel();
         StatePanel.setLayout(new BorderLayout(panespace, panespace));
         StatePanel.setBorder(new LineBorder(Color.green, 10));
         StatePanel.setSize(200, 200);
         super.add(StatePanel, BorderLayout.EAST);
         board = new Board();
         board.setLayout(new BorderLayout(panespace, panespace));
         board.setBorder(new LineBorder(Color.yellow, 10));
         board.setSize(300, 300);
         super.add(board, BorderLayout.NORTH);
         setVisible(true);
    }
}

最好这会使用BorderLayout,但我似乎做错了。我已经尝试过阅读Oracle提供的资料,但它们并没有特别有用。在这一点上,我正处于我想要硬编码值的地步,但我知道我应该能够拆分它以使每个面板尽可能多地占用更大的游戏面板。

3 个答案:

答案 0 :(得分:3)

正如mkhelif所说,你不能在同一个插槽中有两件事。您想要的是board进入CENTER,然后在JPanel中创建另一个SOUTH,其中包含ControlPanelStatePanel FlowLayout }}

答案 1 :(得分:1)

您正在EAST上添加ControlPanel和StatePanel。尝试在WEST上添加ControlPanel。

答案 2 :(得分:1)

除了East / East之外,你还扩展了JPanel而不是JFrame。即,你在哪里

public class Game extends JPanel

你可能想要

public class Game extends JFrame

您还设置了边框,但在面板中没有放置任何内容,因此边框环绕着一个空白区域,使它们看起来像粗线而不是实际边框。您可以尝试在每个面板中添加JTextArea。

此外,当您通过拖动边框更改大小时,CENTER部分(您不使用)会变大。如果你想要你想要的结果,你将不得不使用不同的布局。

祝你好运!