【问题标题】:Problems displaying GUI components with img background显示带有图像背景的 GUI 组件时出现问题
【发布时间】:2015-06-21 22:45:36
【问题描述】:

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

BufferedImage img = null;

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

        }

然后也把这个放到paint方法中...

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

问题是在绘制背景时您看不到按钮和标签等 GUI 组件,即使在其他 GUI 组件添加到内容窗格之前绘制背景也是如此。可以让组件出现,但您必须先突出显示它们或单击它们。

此图为小程序加载时的小程序:

然后这是我在屏幕上点击了几个地方后的小程序:

【问题讨论】:

标签: java swing bluej


【解决方案1】:
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
}

【讨论】:

  • 其他组件实际上并没有绘制,它们只是通过各种不同的方法添加到内容窗格中,抱歉我没有说得太清楚
  • 为了尽快获得更好的帮助,请发布MCVE(最小完整可验证示例)或SSCCE(简短、自包含、正确示例)。
  • @JL9 当然可以,但是paint负责绘制子组件,如果您不调用super.paint,它们将不会被绘制为父容器的一部分...
  • @MadProgrammer 我确实尝试将 super.paint 放入其中并没有什么不同,子组件仍然像上图一样显示,您必须突出显示它们才能看到它们
  • @jl9 然后,您的代码中还有其他一些您没有向我们展示的内容。您还应该检查 img 是否为 null,因为绘制 null img 会导致问题...
猜你喜欢
  • 2017-04-27
  • 1970-01-01
  • 1970-01-01
  • 2021-03-06
  • 2018-02-13
  • 2022-12-16
  • 2010-11-05
  • 2012-07-28
  • 1970-01-01
相关资源
最近更新 更多