图像和面板

时间:2009-10-10 23:10:30

标签: java image swing jpanel

我在JPanel之上添加Image时遇到问题。这就是我想要做的事情:

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。我尝试了一切,但我仍然无法显示面板。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分: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"));

答案 1 :(得分:0)

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

BackgroundPanel条目显示了如何执行此操作。它还提供了一个背景面板,其中包含更多自定义图像绘制解决方案,如果这是您需求的一部分,您可以对其进行缩放和平铺。