Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用img后台显示GUI组件时出现问题_Java_Swing_Bluej - Fatal编程技术网

Java 使用img后台显示GUI组件时出现问题

Java 使用img后台显示GUI组件时出现问题,java,swing,bluej,Java,Swing,Bluej,我已经为我的Java小程序添加了一个背景,我需要一些帮助来理解小程序为什么不能正确显示。为了显示此背景图像,我使用了如下代码: BufferedImage img = null; try { URL url = new URL(getCodeBase(), "Backgrounds/Background.png"); img = ImageIO.read(url); } catch (Exception e) {

我已经为我的Java小程序添加了一个背景,我需要一些帮助来理解小程序为什么不能正确显示。为了显示此背景图像,我使用了如下代码:

BufferedImage img = null;

try {
            URL url = new URL(getCodeBase(), "Backgrounds/Background.png");
            img = ImageIO.read(url);
        }
        catch (Exception e) {

        }
然后也把这个放在画法里

public void paint(Graphics g) {
    g.drawImage(img, 0, 0, null);
}
问题是,在绘制背景时,您无法看到GUI组件,例如按钮和标签,即使在将其他GUI组件添加到内容窗格之前绘制了背景。可以显示组件,但必须先高亮显示或单击它们

此图显示加载小程序时的小程序:

这是我在屏幕上单击几个位置后的小程序:

public void paint(Graphics g) {
    g.drawImage(img, 0, 0, null);
}

首先,该方法调用应该是:

public void paint(Graphics g) {
    g.drawImage(img, 0, 0, this); // Every Component is an image observer
}
然后,要修复断开的油漆链:

public void paint(Graphics g) {
    super.paint(g); // Draw the rest of the components!
    g.drawImage(img, 0, 0, this); // Every Component is an image observer
}

为什么要编写小程序?如果是老师指定的,请参考。是的,这是一个单一作业,我没有太多选择。其他组件实际上没有绘制,它们只是以一系列不同的方法添加到内容窗格中,很抱歉,我没有让它太清晰以便更快地提供更好的帮助,发布一个(最小完整的可验证示例)或者(简短、自包含、正确的示例)。@JL9当然,但paint负责绘制子组件,如果您不调用super.paint,它们将不会作为父容器的一部分进行绘制…@MadProgrammer我确实尝试将super.paint放入其中,但没有任何区别,子组件仍然显示如上图所示,您必须突出显示它们才能看到的位置them@jl9然后,在你的代码中还有一些你没有展示给我们的东西。您还应该检查img是否为null,因为绘制null img将导致问题。。。