在另一个JLabel之上显示JLabel

时间:2012-11-20 14:08:19

标签: 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 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();
    }

我试图在背景标签的TOP上显示汽车标签。但我只是得到了JLabel的背景。我是SWING的新手,所以对我错过的步骤的任何建议都会很棒。

3 个答案:

答案 0 :(得分:4)

  

..我想把它搬到后期。但是现在我希望它首先显示:)

有两种方法,

第一

  • JLabel car放到JPanel,使用Image绘制paintComponent,而不是JLabel background(优势JPanel是容器正确通知LayoutManager)。

  • JLabel car置于JLabel background,但JLabel未实施任何LayoutManager,必须设置所需内容。

    1. 优势JLabel中的所有图片都是静态的,与paintComponent相比,CPU和GPU的广告消费量为零。
    2. 缺点JLabel不是容器,并且LayoutManager有适当的通知,与位于JLabel的{​​{1}}相比,需要一些代码段,用于移动(AbsoluteLayout) )是非常好的解决方案。

第二

使用BufferedImage and Graphics绘制JPanel

答案 1 :(得分:2)

将它们添加到使用OverlayLayout的JPanel。将JLabel添加到另一个JLabel

是不行的

此代码尚未通过编译器,因此请将其视为原样:)

JPanel panel = new JPanel(new OverlayLayout());
panel.add(background);
panel.add(car);

答案 2 :(得分:0)

Works ..添加以下内容使其显示:

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

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