Java 在另一个JLabel上显示一个JLabel

Java 在另一个JLabel上显示一个JLabel,java,swing,jlabel,Java,Swing,Jlabel,我有以下代码: try { File file_background = new File( "C:\\Users\\xxxx\\Desktop\\background.png"); ImageIcon icon_background = new ImageIcon( ImageIO.read(file_background)); JLabel background = new JLa

我有以下代码:

try {
        File file_background = new File(
                "C:\\Users\\xxxx\\Desktop\\background.png");
        ImageIcon icon_background = new ImageIcon(
                ImageIO.read(file_background));
        JLabel background = new JLabel(icon_background);
        window.setContentPane(background);

        File file_car = new File(
                "C:\\Users\\xxxxxx\\Desktop\\car.png");
        ImageIcon icon_car = new ImageIcon(ImageIO.read(file_car));

        JLabel car = new JLabel(icon_car);
        car.setVisible(true);

        background.add(car);
        // TODO Get car showing on top of the background label

    } catch (IOException e) {

        e.printStackTrace();
    }

我试图让汽车标签显示在背景标签的顶部。但我只看到了杰拉贝尔的背景。我是SWING新手,所以任何关于我缺少哪些步骤的建议都非常有用。

有效。。添加了以下内容以使其显示:

car.setBounds(200, 200, 200, 200);

显然,这是因为默认情况下使用了空布局管理器。因此,设置标签的边界将使其能够显示,因为默认大小为0。

将它们都添加到使用的JPanel中。将一个
JLabel
添加到另一个
JLabel
是不正常的

这段代码还没有经过编译器的编译,所以请接受它:)

…我想把它移到后面的阶段。但现在我希望它首先显示:)

有两种方式,

第一。
  • 使用
    paintComponent
    ,而不是
    JLabel background
    ,将
    JLabel car
    放置到
    JPanel
    ,绘制一幅
    图像
    (advantage
    JPanel
    是带有
    LayoutManager
    适当通知的容器)

  • JLabel-car
    放入
    JLabel-background
    ,但
    JLabel
    尚未实施任何
    LayoutManager
    ,必须设置所需的设置

  • 优点
    JLabel
    中的所有图像都是静态的,与
    paintComponent
    相比,CPU和GPU的输入ad消耗为零
  • 缺点
    JLabel
    不是容器,对于
    LayoutManager
    有适当的通知,需要一些代码,而且与
    JLabel
    放在
    JPanel
    中相比,对于移动(绝对布局)是非常好的解决方案
第二。
使用绘制两幅
图像

您是否尝试过使顶部的标签不不透明?取决于问题,您想使用
JLabel car
?,还是此图是透明的static@mre很高兴再次在这里见到你是的,我想晚一点再搬。但现在我想让它先显示:)@mre-试过了。没有做任何事情您能解释一下为什么将一个JLabel添加到另一个JLabel是不合适的吗?感谢查看JPanel的文档。它被设计为包含其他JComponent(JLabel是一个JComponent)。JLabel间接继承了Container,Container是一个AWT组件,设计用于包含其他AWT组件。这是令人困惑的,但我想如果你不使用JPanel,你会遇到一些类似于你刚才所做的(布局不工作)的问题。因此,您希望我将它们都从JLabel更改为JPanel,然后使用OverlyLayout,以便一个显示在另一个上?+1,用于逐OverlyLayout布局JLabel,但这是在JLabel中放置JLabel的一个很好的理由,这里有一个
OverlayLayout
示例。默认的布局管理器从来都不是空的布局管理器……您必须在某个地方明确地设置它,我强烈建议您进行更改。
JPanel panel = new JPanel(new OverlayLayout());
panel.add(background);
panel.add(car);