gpt4 book ai didi

java - 使用 JLayeredPane 将多个 JPanel 添加到一个 JPanel

转载 作者:行者123 更新时间:2023-11-29 07:43:58 25 4
gpt4 key购买 nike

我正在尝试将多个面板添加到另一个面板。我希望它们彼此重叠,所以我使用的是 JLayeredPane。我为每个按钮添加了一个按钮。工作时应该会出现两个按钮。

import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;

public class PanelTest {
public static void main(String[] args) {
JFrame frame = new JFrame();
JPanel mainPanel = new JPanel();
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();

JLayeredPane layers = new JLayeredPane();
mainPanel.add(layers);

panel2.setOpaque(false);
panel1.setOpaque(false);
panel1.setVisible(true);
panel2.setVisible(true);

panel1.add(new JButton("1111111111"));
panel2.add(new JButton("2"));

frame.setContentPane(mainPanel);
layers.add(panel1, new Integer(2));
layers.add(panel2, new Integer(3));

frame.setVisible(true);
frame.setSize(500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

只有主面板的灰色背景是可见的。我做错了什么?

最佳答案

将组件添加到 JLayeredPane 时,实际上是在使用容器将组件添加到空布局。这意味着您必须完全指定组件的大小和位置,通常使用 setBounds(...) 调用来解决这两个问题。在 panel1 和 panel2 上调用它,例如:

panel1.setBounds(10, 10, 100, 100);
panel2.setBounds(70, 70, 100, 100);

编辑:

setting bounds didn't make any difference

设置大小(边界)是必需的,但您还有一个额外的问题。

您正在将 JLayeredPane 添加到使用 FlowLayout 的 JPanel。默认情况下,FlowLayout 遵循添加到它的组件的首选大小。由于 JLayeredPane 使用 null 布局,其首选大小为 (0, 0),因此无需绘制任何内容。

两种解决方案:

  1. 您不需要 JPanel,只需使用:frame.setContentPane(layers);
  2. 如果您真的想使用面板,那么您需要更改布局管理器:JPanel mainPanel = new JPanel( new BorderLayout());

关于java - 使用 JLayeredPane 将多个 JPanel 添加到一个 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27459783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com