java - 设置JFrame背景,为什么这不起作用?

标签 java swing

我想为我的 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 个“完成”。所以这意味着所有任务都已执行。 我不明白错误在哪里。请帮助我!

最佳答案

打印加载图像的宽度,如果为-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...


一些要点:

关于java - 设置JFrame背景,为什么这不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24805191/

相关文章:

java - 收集数组列表中的所有可观察字符串

java - 当我运行它时图表不会显示?

java - JButton 数组 Action 监听器仅适用于最后一个按钮

java - JLayeredPane 和 MouseAdapter 问题

java 。来自 URL 的损坏图片

java - 从 mysql 数据库中提取特定数据到 thymeleaf

java - 如何使用 keytool 或 openssl 生成签名证书?

java - 如何将使用 QueryParser 的查询转换为编程方式?

java - FFT 吉他调音器应用程序 - 频率不正确

java - 在 Swing UI 中隐藏表单字段并相应地重新对齐其他表单字段