使Borderlayout中的底部面板像中心面板一样展开

时间:2013-06-13 09:29:57

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

所以这是一个非常简单的问题,但我找不到一种简单的方法来实现它。我基本上有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);
}

}

4 个答案:

答案 0 :(得分:3)

***************BorderLayout************************
*  ********BorderLayout*in*PAGE_START************ *
*  *                                            * *
*  *   Component in PAGE_START                  * *
*  *                                            * *
*  *   Component in PAGE_END                    * *
*  *                                            * *
*  ********************************************** *
*                                                 *
*      Component in CENTER                        *
*                                                 *
***************************************************

有关如何合并布局以创建所需布局的更多提示,请参阅Nested Layout Example

答案 1 :(得分:2)

  

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

答案 2 :(得分:1)

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

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);
}

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

答案 3 :(得分:0)

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