3

我有以下代码:

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

我试图在背景标签的顶部显示汽车标签。但我只得到背景 JLabel 显示。我是 SWING 的新手,所以任何关于我缺少哪些步骤的建议都会很棒。

4

3 回答 3

4

..我想把它移到稍后阶段。但是现在我希望它首先显示:)

有两种方式,

第一个。

  • 通过使用, 而不是(优点是具有适当通知的容器)JLabel car 来放置JPanel, 绘制一个。ImagepaintComponentJLabel backgroundJPanelLayoutManager

  • 放入JLabel carJLabel backgroundJLabel没有实现任何LayoutManager,必须设置期望。

    1. 优点是所有图片JLabel都是静态的,与paintComponent.
    2. 缺点JLabel不是容器和适当的通知LayoutManager,需要一些代码,而且与JLabel放置 相比JPanel,移动(AbsoluteLayout)是一个很好的解决方案。

第二。

Images使用BufferedImage 和 Graphics进行绘制。

于 2012-11-20T14:30:09.907 回答
3

将它们都添加到使用OverlayLayout的 JPanel 中。不能将 a 添加JLabel到另一个JLabel.

这段代码没有经过编译器所以把它当作它是什么:)

JPanel panel = new JPanel(new OverlayLayout());
panel.add(background);
panel.add(car);
于 2012-11-20T14:20:33.490 回答
0

作品..添加了以下内容以使其显示:

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

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

于 2012-11-20T14:20:04.287 回答