【问题标题】:setting a JFrame background, why this doesn't work?设置 JFrame 背景,为什么这不起作用?
【发布时间】:2014-09-08 10:08:02
【问题描述】:

我想为我的 jFrame 设置背景,我正在使用以下代码:

import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class DemoBackgroundSwing extends JPanel {

  private Image img;

  public DemoBackgroundSwing() {
      System.out.println("done");
    img = Toolkit.getDefaultToolkit().createImage("red.png");
    System.out.println("done");
    loadImage(img);
    System.out.println("done");
  }

  private void loadImage(Image img) {
    try {
      MediaTracker track = new MediaTracker(this);
      track.addImage(img, 0);
      track.waitForID(0);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }

  protected void paintComponent(Graphics g) {
    setOpaque(false);
    System.out.println("done");
    g.drawImage(img, 0, 0, null);
    super.paintComponent(g);
  }

  public static void main(String... argv) {
    JFrame frame = new JFrame("Demo Background Image");
    DemoBackgroundSwing back = new DemoBackgroundSwing();
    System.out.println("done");
    frame.getContentPane().add(back);
    frame.setSize(400, 287);
    frame.setVisible(true);
  }
}

当我执行它时,在系统输出中我有 5 个“完成”。所以这意味着所有任务都已执行。 我不明白错误在哪里。请帮帮我!

【问题讨论】:

  • 小提示:在不同的地方使用不同的调试信息。
  • 对我有用,可能找不到你的 red.png 文件?
  • 很抱歉,没有任何错误。它只是没有为我的框架设置任何背景。
  • 如果您的 red.png 文件放在哪里?它在正确的目录中吗?
  • @sbat,我也这么认为,但我可以改变什么来验证它?

标签: java swing


【解决方案1】:

打印加载图像的宽度,如果它是-1,则图像没有正确加载。

img = Toolkit.getDefaultToolkit().createImage("red.png");
System.out.println(img.getWidth(null)); // check what it prints

值得在Loading Images Using getResource阅读Java 教程


您可以根据图像位置尝试任何一种。

// Read from same package 
ImageIO.read(getClass().getResourceAsStream("c.png"));

// Read from images folder parallel to src in your project
ImageIO.read(new File("images/c.jpg"));

// Read from src/images folder
ImageIO.read(getClass().getResource("/images/c.png"))

// Read from src/images folder
ImageIO.read(getClass().getResourceAsStream("/images/c.png"))

Read more...


几点:

【讨论】:

  • 谢谢我使用了 System.out.println(img.getWidth(null));检查它打印的内容..输出为-1。然后我修改了 ...createImage("red.png");在 ...createImage(getClass().getResource("red.png"));
  • 但它位于 src 文件夹下的文件夹 images 中,并尝试帖子中提到的选项。阅读其他要点。
猜你喜欢
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
  • 2012-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多