在JLayeredPane上添加了两个JPanel后没有任何输出



我要做的是覆盖两个面板,其中我通过使用JLabel在背景面板中插入图像,我希望另一个较小的面板出现在同一背景图像上!这是我写的:

import javax.swing.*;
import javax.swing.text.html.ImageView;
import java.awt.*;
public class addImage extends JFrame {
    private JLabel label;
    private ImageIcon Image;
    private JButton b;
    private JPanel panel1;
    private JPanel panel2;
    private JLayeredPane layerpanel;
    public addImage() {
        // JFRame
        super("First Time adding Image");
        setLayout(null);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setSize(400, 400);
        // JLabel containing Image
        Image = new ImageIcon(getClass().getResource("image1.jpg"));
        // Adding Image in JLabel
        label = new JLabel(Image);
        // Adding Label to panel1
        panel1 = new JPanel();
        panel1.add(label);
        // JPanel2
        panel2 = new JPanel();
        panel2.setBackground(Color.darkGray);
        panel2.setPreferredSize(new Dimension(200, 200));
        panel2.setOpaque(true);
        // LAyeredPane adding both panels
        layerpanel = new JLayeredPane();
        layerpanel.setLayout(new BorderLayout());
        layerpanel.add(panel1, new Integer(0), 0);
        layerpanel.add(panel2, new Integer(1), 1);
        add(layerpanel);
    }
    public static void main(String[] args) {
        new addImage();
    }
}

在执行了这段代码之后,除了空帧之外,我没有得到任何输出!我得到这些错误:

Exception in thread "main" java.lang.IllegalArgumentException: cannot add to layout: constraint must be a string (or null)
    at java.awt.BorderLayout.addLayoutComponent(Unknown Source)
    at java.awt.Container.addImpl(Unknown Source)
    at javax.swing.JLayeredPane.addImpl(Unknown Source)
    at java.awt.Container.add(Unknown Source)
    at addImage.<init>(addImage.java:45)
    at addImage.main(addImage.java:53)

我已经检查了所有相关的问题,但仍然无法找到解决方案!!!!任何形式的帮助都将不胜感激!感谢

您的问题在这里:

layerpanel.setLayout(new BorderLayout());
layerpanel.add(panel1, new Integer(0), 0);
layerpanel.add(panel2, new Integer(1), 1);

对它没有帮助

setLayout(null);

JLayeredPane现在要求您将BorderLayout的一个有效约束传递给它(如BorderLayout.NORTH)。

话虽如此,我不确定你希望这样做能取得什么成就。

您可以通过使用更少混乱的CardLayout来获得相同的效果,请参阅如何使用CardLayout了解更多详细信息

我可以使用类似…的东西"复制"您想要的输出。。。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
public class AddImage extends JFrame {
    private JLabel label;
    private ImageIcon Image;
    private JButton b;
    private JPanel panel1;
    private JPanel panel2;
    private JLayeredPane layerpanel;
    public AddImage() {
        // JFRame
        super("First Time adding Image");
        setLayout(new BorderLayout());
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setSize(400, 400);
        // JLabel containing Image
//      Image = new ImageIcon(getClass().getResource("image1.jpg"));
        // Adding Image in JLabel
        label = new JLabel("Help");
        // Adding Label to panel1
        panel1 = new JPanel();
        panel1.add(label);
        // JPanel2
        panel2 = new JPanel();
        panel2.setBackground(Color.darkGray);
        panel2.setPreferredSize(new Dimension(200, 200));
        panel2.setOpaque(true);
        // LAyeredPane adding both panels
        layerpanel = new JLayeredPane();
        layerpanel.setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = 0;
        layerpanel.add(panel1, gbc);
        layerpanel.add(panel2, gbc);
        layerpanel.setLayer(panel1, new Integer(0));
        layerpanel.setLayer(panel2, new Integer(1));
        add(layerpanel);
    }
    public static void main(String[] args) {
        new AddImage();
    }
}

最新更新