0

JPanelImage. 这就是我想要做的:

Image bgImage = loadImage(filename);
JPanel jp = new JPanel();

jp.setBounds(100,100,100,100);
jp.setOpaque(true);
jp.setBackgroudColor(Color.red);

bgImage.add(jp);

执行此操作后,我只看到bgImage. 我尝试了一切,但仍然无法显示面板。有人可以帮助我吗?

4

2 回答 2

4

您不能将组件放置在Image. 您要做的是将 绘制Image到摆动组件的背景上(如JPanel)。所有的 swing 组件都有一个paint()调用这三个方法的方法(可能不是这个顺序):paintComponent(), paintChildren(), paintBorder(). 因此,您想要覆盖paintComponent()在面板上绘制背景图像的方法。当它运行时,您的自定义方法将被调用,然后该paintChildren()方法将被调用,这会将所有“子”组件绘制在背景图像的顶部:

class BackgroundImagePanel extends JPanel {

    public void setBackgroundImage(Image backgroundImage) {
        this.backgroundImage = backgroundImage;
    }

    @Override
    protected void paintComponent(Graphics graphics) {
        super.paintComponent(graphics);
        graphics.drawImage(backgroundImage, 0, 0, this);
    }

    private Image backgroundImage;
}

BackgroundImagePanel panel = new BackgroundImagePanel();
panel.setBackgroundImage(image);
panel.add(new JTextField("Enter text here..."));
panel.add(new JButton("Press Me"));
于 2009-10-10T23:34:19.523 回答
0

“BackgroundImagePanel”解决方案以实际大小绘制图像。如果这是一个要求,那么您可以只使用 JLabel 而不是创建自定义组件。

BackgroundPanel条目显示了如何执行此操作。它还提供了一个带有更多自定义图像绘制解决方案的背景面板,如果这是您的要求的一部分,它将允许您缩放和平铺图像。

于 2009-10-12T15:43:05.613 回答