设置 JFrame 背景,为什么这不起作用? [英] setting a JFrame background, why this doesn't work?

查看:35
本文介绍了设置 JFrame 背景,为什么这不起作用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

import java.awt.Graphics;导入 java.awt.Image;导入 java.awt.MediaTracker;导入 java.awt.Toolkit;导入 javax.swing.JFrame;导入 javax.swing.JPanel;公共类 DemoBackgroundSwing 扩展 JPanel {私人图像 img;公共 DemoBackgroundSwing() {System.out.println("完成");img = Toolkit.getDefaultToolkit().createImage("red.png");System.out.println("完成");加载图像(img);System.out.println("完成");}私有无效加载图像(图像 img){尝试 {MediaTracker track = new MediaTracker(this);track.addImage(img, 0);track.waitForID(0);} catch (InterruptedException e) {e.printStackTrace();}}受保护的无效paintComponent(图形g){设置不透明(假);System.out.println("完成");g.drawImage(img, 0, 0, null);super.paintComponent(g);}公共静态无效主(字符串... argv){JFrame frame = new JFrame("演示背景图片");DemoBackgroundSwing back = new DemoBackgroundSwing();System.out.println("完成");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));//检查打印的内容

值得阅读上的Java教程使用 getResource 加载图像

<小时>

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

//从同一个包中读取ImageIO.read(getClass().getResourceAsStream("c.png"));//从项目中与 src 平行的图像文件夹中读取ImageIO.read(new File("images/c.jpg"));//从 src/images 文件夹中读取ImageIO.read(getClass().getResource("/images/c.png"))//从 src/images 文件夹中读取ImageIO.read(getClass().getResourceAsStream("/images/c.png"))

阅读更多...><小时>

几点:

I want to set a background to my jFrame, and I'm using this code:

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);
  }
}

when I execute it, in system out I have 5 "done". so this means that all tasks are executed. I don't understand where's the error. Please Help me!

解决方案

Print the width of loaded image if it's -1 then image is not properly loaded.

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

It's worth reading Java Tutorial on Loading Images Using getResource


You can try any one based on image location.

// 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...


Some Points:

这篇关于设置 JFrame 背景,为什么这不起作用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆