【问题标题】:JavaSwing Layout Confusion/DifficulltiesJava Swing 布局混乱/困难
【发布时间】:2012-10-12 07:09:35
【问题描述】:

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

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

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

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

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 提供的材料,但它们并不是特别有用。在这一点上,我想在其中硬编码值,但我知道我应该能够拆分它,让每个面板尽可能多地占用更大的游戏面板。

【问题讨论】:

  • 请学习java命名约定并遵守它们。

标签: java swing layout border-layout nestedlayout


【解决方案1】:

正如 mkhelif 所说,你不能在同一个插槽中拥有两个东西。你想要的是board 进入CENTER,然后在SOUTH 中创建另一个JPanel,其中包含ControlPanelStatePanelFlowLayout 中。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      public class Game extends JPanel
      

      你可能想要

      public class Game extends JFrame
      

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

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

      祝你好运!

      【讨论】:

      • 无需扩展 JFrame(与无需扩展 JPanel 相同,除了进行自定义绘画) - 所有 JSomething 都应按原样使用
      • @kleopatra 你在 JFrame 上可能是对的。当我将代码复制到我的计算机时,我添加了一个适用于 JFrame 而不是 JPanel 的 setDefaultCloseOperation,但这超出了所要求的范围。但我确实认为她需要扩展其中一个,否则 setLayout、setVisible 和 .add 不起作用。
      • 她需要扩展一个或另一个是否在问题的范围内:这完全是错误的(提示:使用与继承)。您可以考虑删除这部分答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-12
      • 2013-09-27
      • 1970-01-01
      • 2014-07-07
      • 2022-01-19
      • 2013-10-01
      相关资源
      最近更新 更多