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

我知道这已经很晚了,但如果现在有人遇到这个问题,我建议使用 BoxLayoutBorderLayout在它的五个位置中每一个都只能有一个单元格,而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 是任意面板尺寸。