【问题标题】:Make bottom panel in Borderlayout to expand like center panel在 Borderlayout 中制作底部面板以像中心面板一样展开
【发布时间】:2013-06-13 09:29:56
【问题描述】:

所以这是一个非常简单的问题,但我找不到一个简单的方法来实现它。我基本上有 3 个 JPanel 实例:北、南和中心。通常,如果您使用窗口高度,则中心面板将是可变的。我想要的是让南面板高度可变而不是中心高度。

代码如下:

public class TestCode {

public static void main(String[] args) {

    JFrame window = new JFrame("Test");
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setSize(300, 300);

    JPanel panelUp = new JPanel();
    JPanel panelCenter = new JPanel();
    JPanel panelDown = new JPanel();

    window.add(panelUp, BorderLayout.NORTH);
    window.add(panelCenter, BorderLayout.CENTER);
    window.add(panelDown, BorderLayout.SOUTH);

    panelUp.setBackground(new Color(200, 240, 200));
    panelCenter.setBackground(new Color(240, 200, 200));
    panelDown.setBackground(new Color(200, 200, 240));

    panelUp.setPreferredSize(new Dimension(panelUp.getWidth(), 50));
    panelCenter.setPreferredSize(new Dimension(panelCenter.getWidth(), 100));
    panelDown.setPreferredSize(new Dimension(panelDown.getWidth(), window.getHeight() - 150));

    window.setVisible(true);
}

}

【问题讨论】:

  • 更改布局。也许像GridBagLayout 这样的东西会更好用
  • 你也可以使用BoxLayout
  • 谢谢,我会看看这些组件...

标签: java swing jpanel layout-manager border-layout


【解决方案1】:
***************BorderLayout************************
*  ********BorderLayout*in*PAGE_START************ *
*  *                                            * *
*  *   Component in PAGE_START                  * *
*  *                                            * *
*  *   Component in PAGE_END                    * *
*  *                                            * *
*  ********************************************** *
*                                                 *
*      Component in CENTER                        *
*                                                 *
***************************************************

有关如何组合布局以创建所需布局的更多想法,请参阅Nested Layout Example

【讨论】:

  • 抱歉,我不太明白重点,感谢您的帮助,但我认为这是一个过于笼统的情况,因为我问的是一个精确的问题
【解决方案2】:

我想要的是让南面板高度可变 而不是中心那个。

【讨论】:

  • 我会看看这些布局,我猜唯一的原始布局(包含在 Swing 中)是 GridBagLayout,其他的都是附加组件,对吗?
  • 不关心是否存在 JPanel 或 JComponent,LayoutManager 对两者的工作方式非常相似,对于容器和组件,请注意不要伪造 JFrame (JDialof/JWindow) 具有 BorderLayout 而 JPanel 已实现 FlowLayout在 API 中作为默认 LayoutManagers,其余的 JComponents 没有任何 LayoutManager(忘记了 JToolbar - BoxLayout)
  • 为什么不用BorderLayout CENTER和TOP,然后在TOP中,放两个flowlayout面板呢?不需要使用 GBL 或 SL
  • @Oliver Watkins 但 JPanel 不会随着容器不断调整大小并保持比例,然后 BorderLayout、FlowLayout 和 BoxLayout 不是.....
【解决方案3】:

只需将顶部和中心添加到本身就是边框布局的面板中:

public static void main(String[] args) {

    JFrame window = new JFrame("Test");
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setSize(300, 300);


    JPanel innerPanel = new JPanel(new BorderLayout());


    JPanel panelUp = new JPanel();
    JPanel panelCenter = new JPanel();
    JPanel panelDown = new JPanel();

    window.add(innerPanel, BorderLayout.NORTH);
    window.add(panelDown, BorderLayout.CENTER);

    innerPanel.add(panelUp, BorderLayout.NORTH);
    innerPanel.add(panelCenter, BorderLayout.SOUTH);

    panelUp.setBackground(new Color(200, 240, 200));
    panelCenter.setBackground(new Color(240, 200, 200));
    panelDown.setBackground(new Color(200, 200, 240));

    panelUp.setPreferredSize(new Dimension(panelUp.getWidth(), 50));
    panelCenter.setPreferredSize(new Dimension(panelCenter.getWidth(), 100));
    panelDown.setPreferredSize(new Dimension(panelDown.getWidth(), window.getHeight() - 150));

    window.setVisible(true);
}

这段代码应该完全符合您的要求,而几乎不改变代码

【讨论】:

  • "..FLOWLAYOUT。这应该可以解决问题" a) 没有必要对我们大喊大叫。 b) 如果程序员手动设置框架的宽度(强制一个组件到下一行),它只会“满足”要求。这是非常脆弱的编程。
  • then... 在 NORTH 面板中放置另一个 Borderlayout 面板。然后,此内部边框布局面板应将其两个面板设置为 NORTH,然后设置为 SOUTH。我应该做的伎俩
  • @Andrew Thompson:我不明白你想说什么,虽然它看起来很有趣。您能否解释一下“手动设置框架的宽度”的含义,以及它是脆弱的编程的事实?
  • @Olivier Watkins:谢谢你,你的例子完全符合我的意思,虽然有些事情我需要说清楚......
  • @Matei 我最初说使用 Flowlayout... 但后来意识到我错了。所以这就是为什么他的评论不再有意义
【解决方案4】:

您是否尝试过为北面板和中面板设置最大尺寸 (setMaximumSize)? 或者直接setSize

【讨论】:

  • 抱歉,setMaximumSize() 和 setSize() 都没有效果
  • 哦,那你真的得使用合适的布局管理器了。 GridBagLayout 几乎可以做任何事情。起初它可能看起来有点复杂或令人困惑,但一旦你掌握了基础知识,就可以很容易地用它来构建任何你想要的东西。
猜你喜欢
  • 1970-01-01
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
  • 2011-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多