JPanel 在另一个 JPanel 之上
JPanel on top of another JPanel
我使用 JPanel 有一段时间了,现在想将一个 JPanel 放在另一个 JPanel 之上。
我看过使用 JLayer,但我想知道是否有只设置底部和顶部层的解决方案,我不想尽可能设置每个组件层。
例子
JPanel bottomPanel = new JPanel(); # Set as bottom panel
JPanel topPanel = new JPanel(); # Set as top panel
JPanel sidePanel = new JPanel(); # Don't have to set
JPanel anotherSidePanel = new JPanel(); # Don't have to set
如果这不可能,最好的解决方案是什么,谢谢。
您可以让主面板使用 BorderLayout
。
然后你可以这样做:
mainPanel.add(leftSide, BorderLayout.LINE_START);
mainPanel.add(rightSide, BorderLayout.LINE_END);
JLayeredPane lp = new JLayeredPane();
mainPanel.add(lp, BorderLayout.CENTER);
听起来您想要的是布局管理器。有几种不同的适合不同的需求。这个post下面有个link。
我个人最喜欢的是 GridLayout。所以对于你想做的事情,你可以这样做:
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(2, 1));
//the first number is the number of rows, the second is the number of columns
JPanel topPanel = new JPanel();
JPanel bottomPanel = new JPanel();
panel.add(topPanel);
panel.add(bottomPanel);
这将如你所愿。
如果你想了解更多关于它们的信息,这里是 link:
Oracle Docs on Layout Managers
我知道这已经很晚了,但如果现在有人遇到这个问题,我建议使用 BoxLayout
。 BorderLayout
在它的五个位置中每一个都只能有一个单元格,而GridLayout
的单元格都是相同的维度。如果你想堆叠不同大小的 JPanel,下面是 BoxLayout
的实现方式:
JFrame frame = new JFrame("Intro to BoxLayout");
JPanel container = new JPanel();
JPanel panel1 = new JPanel();
panel1.setPreferredSize(new Dimension(X1, Y1));
JPanel panel2 = new JPanel();
panel2.setPreferredSize(new Dimension(X2, Y2));
container.setLayout(new BoxLayout(container, BoxLayout.PAGE_AXIS));
container.add(panel1);
container.add(panel2);
frame.add(container);
frame.pack();
frame.setVisible(true);
其中 X1、Y1、X2、Y2 是任意面板尺寸。
我使用 JPanel 有一段时间了,现在想将一个 JPanel 放在另一个 JPanel 之上。
我看过使用 JLayer,但我想知道是否有只设置底部和顶部层的解决方案,我不想尽可能设置每个组件层。
例子
JPanel bottomPanel = new JPanel(); # Set as bottom panel
JPanel topPanel = new JPanel(); # Set as top panel
JPanel sidePanel = new JPanel(); # Don't have to set
JPanel anotherSidePanel = new JPanel(); # Don't have to set
如果这不可能,最好的解决方案是什么,谢谢。
您可以让主面板使用 BorderLayout
。
然后你可以这样做:
mainPanel.add(leftSide, BorderLayout.LINE_START);
mainPanel.add(rightSide, BorderLayout.LINE_END);
JLayeredPane lp = new JLayeredPane();
mainPanel.add(lp, BorderLayout.CENTER);
听起来您想要的是布局管理器。有几种不同的适合不同的需求。这个post下面有个link。
我个人最喜欢的是 GridLayout。所以对于你想做的事情,你可以这样做:
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(2, 1));
//the first number is the number of rows, the second is the number of columns
JPanel topPanel = new JPanel();
JPanel bottomPanel = new JPanel();
panel.add(topPanel);
panel.add(bottomPanel);
这将如你所愿。
如果你想了解更多关于它们的信息,这里是 link: Oracle Docs on Layout Managers
我知道这已经很晚了,但如果现在有人遇到这个问题,我建议使用 BoxLayout
。 BorderLayout
在它的五个位置中每一个都只能有一个单元格,而GridLayout
的单元格都是相同的维度。如果你想堆叠不同大小的 JPanel,下面是 BoxLayout
的实现方式:
JFrame frame = new JFrame("Intro to BoxLayout");
JPanel container = new JPanel();
JPanel panel1 = new JPanel();
panel1.setPreferredSize(new Dimension(X1, Y1));
JPanel panel2 = new JPanel();
panel2.setPreferredSize(new Dimension(X2, Y2));
container.setLayout(new BoxLayout(container, BoxLayout.PAGE_AXIS));
container.add(panel1);
container.add(panel2);
frame.add(container);
frame.pack();
frame.setVisible(true);
其中 X1、Y1、X2、Y2 是任意面板尺寸。