所以这是一个非常简单的问题,但我找不到一种简单的方法来实现它。我基本上有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);
}
}
答案 0 :(得分:3)
***************BorderLayout************************
* ********BorderLayout*in*PAGE_START************ *
* * * *
* * Component in PAGE_START * *
* * * *
* * Component in PAGE_END * *
* * * *
* ********************************************** *
* *
* Component in CENTER *
* *
***************************************************
有关如何合并布局以创建所需布局的更多提示,请参阅Nested Layout Example。
答案 1 :(得分:2)
我想要的是让南面板高度可变 而不是中心的。
BorderLayout无法使用,而不从ComponentListener侦听JFrame,重新计算PreferredSize然后调用JFrame.revalidate()和JFrame.repaint(),
使用正确的LayoutManager
SpingLayout来自@aterai
答案 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 。