Java 图像和面板

Java 图像和面板,java,image,swing,jpanel,Java,Image,Swing,Jpanel,在图像上添加JPanel时遇到问题。这就是我想做的: Image bgImage = loadImage(filename); JPanel jp = new JPanel(); jp.setBounds(100,100,100,100); jp.setOpaque(true); jp.setBackgroudColor(Color.red); bgImage.add(jp); 执行此操作后,我只看到bg图像。我什么都试过了,但还是无法显示面板。有人能帮我吗?您不能在图像中放置组件。您要做

图像
上添加
JPanel
时遇到问题。这就是我想做的:

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

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

bgImage.add(jp);

执行此操作后,我只看到
bg图像
。我什么都试过了,但还是无法显示面板。有人能帮我吗?

您不能在
图像中放置组件。您要做的是将
图像
绘制到swing组件的背景上(如
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"));

不能将组件放置在
图像中。您要做的是将
图像
绘制到swing组件的背景上(如
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"));
“BackgroundImagePanel”解决方案按实际大小绘制图像。如果这是一项要求,那么您可以只使用JLabel而不是创建自定义组件

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

背景图像面板解决方案按实际大小绘制图像。如果这是一项要求,那么您可以只使用JLabel而不是创建自定义组件


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

uhm,如果我的代码是一个垃圾,很抱歉。我有一个较长的代码正在工作(不是上面的代码)。但我真的需要将面板放在图像的顶部,因为从那里我将放置swing组件…简单地说,我想要一个图像作为我的背景,在顶部放置一个“不可见”面板,最后放置swing组件:|好的,明白了。我已经编辑了我的答案,使之更具描述性。嗯,如果我的代码是垃圾代码,那我很抱歉。我有一个较长的代码正在工作(不是上面的代码)。但我真的需要将面板放在图像的顶部,因为从那里我将放置swing组件…简单地说,我想要一个图像作为我的背景,在顶部放置一个“不可见”面板,最后放置swing组件:|好的,明白了。我对我的答案进行了编辑,以便更具描述性。
setBackgroundcolor
中有一个输入错误。
JPanel上没有名为
setBackgroundcolor
的方法。
JPanel
上没有名为
setBackgroundcolor
的方法