Java 一个框架中有多个JPanel/具有圆括号图像和另一个顶部有组件的层

Java 一个框架中有多个JPanel/具有圆括号图像和另一个顶部有组件的层,java,swing,jframe,jpanel,jlabel,Java,Swing,Jframe,Jpanel,Jlabel,我有一个带有JPanel的JFrame,其中有一个带有ImageIcon()的JLabel。一切都运行得很好,问题是我现在想在JFrame中添加另一个JPanel和所有其他东西,比如按钮等等。但它仍然在顶部显示背景图像,与第二个JPanel无关 有人能帮我吗? 以下是我的代码摘录: JFrame window = new JFrame("Http Download"); /* * Background Section */ JPanel panel1 = new JPanel(); J

我有一个带有JPanel的JFrame,其中有一个带有ImageIcon()的JLabel。一切都运行得很好,问题是我现在想在JFrame中添加另一个JPanel和所有其他东西,比如按钮等等。但它仍然在顶部显示背景图像,与第二个JPanel无关

有人能帮我吗? 以下是我的代码摘录:

JFrame window = new JFrame("Http Download");


/*
 * Background Section
 */
JPanel panel1 = new JPanel();

JLabel lbl1 = new JLabel();


/*
 * Component Section
 */
JPanel panel2 = new JPanel();

JLabel lbl2 = new JLabel();


/*
 * Dimension Section
 */
Dimension windowSize = new Dimension(800, 600);
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();

public HTTPDownloadGUI() {

    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    panel1.setLayout(null);
    panel1.setSize(windowSize);
    panel1.setOpaque(false);

    panel2.setLayout(null);
    panel2.setSize(windowSize);
    panel2.setOpaque(false);

    lbl1.setSize(windowSize);
    lbl1.setLocation(0, 0);
    lbl1.setIcon(new ImageIcon(getClass().getResource("bg1.png")));
    panel1.add(lbl1);

    lbl2.setBounds(0, 0, 100, 100);
    //lbl2.setIcon(new ImageIcon(getClass().getResource("bg2.png")));
    lbl2.setBackground(Color.GREEN);
    panel2.add(lbl2);

    panel1.add(panel2);

    window.add(panel1);

    int X = (screen.width / 2) - (windowSize.width / 2);
    int Y = (screen.height / 2) - (windowSize.height / 2);

    window.setBounds(X,Y , windowSize.width, windowSize.height);
    window.setVisible(true);

}
  • 避免使用空布局,这样做会带来更多麻烦,因此它们是值得的
  • 将框架a布局设置为
    BorderLayout
  • 将标签添加到框架中
  • 将标签布局设置为
    BorderLayout
  • 创建面板并将其不透明属性设置为false
  • 按照常规将其他组件添加到
  • 将面板添加到标签
  • 结帐

    例如

    使用示例更新

    • panel1
      是主要的背景
    • panel1
      的布局设置为
      BorderLayout
    • lbl1
      添加到
      panel1
    • lbl1
      的布局设置为
      BorderLayout
    • panel2
      的布局设置为您想要使用的布局
    • panel2
      的不透明度属性设置为
      false
      panel2.setOpacity(false)
    • lbl2
      添加到
      panel2
    • panel2
      添加到
      lbl1
    • panel1
      添加到您想要的内容中


    我建议你听从程序员的建议。如果选择使用空布局,请确保删除以前的
    JPanel
    ,并将新布局添加到内容窗格
    window.setContentPane(panel2)
    并调用
    window.repaint()
    面板2似乎没有显示任何内容的原因是因为没有可显示的内容。只需为
    lbl2
    设置文本即可显示
    JPanel
    本身可见:

    JLabel lbl2 = new JLabel("Some text");
    

    但是,我建议不要使用
    null
    布局,因为它会给开发人员带来设置位置和尺寸的开销,而a可以轻松为您管理这些位置和尺寸。

    您指的是哪些标签、哪些框架和哪个面板?请你再解释一下好吗?太好了,它很好用。我的错误是我将panel2添加到panel1而不是label1。谢谢你的帮助!
    JLabel lbl2 = new JLabel("Some text");