Java JPanel上没有显示图像

Java JPanel上没有显示图像,java,swing,Java,Swing,我花了大约两个小时在我的Jpanel上显示一张800*600的“背景图片”,它根本就不显示,这里怎么了 顺便说一句:有时我想在应用程序运行时更改我的背景,我不应该使用除main之外的其他方法吗?如果是的话,这种方法会是什么样子?我仍然会遇到诸如“无法进行静态引用…”之类的错误 缺少图像等资源是一个常见问题。您确定“Title.png”(区分大小写)在您的类路径中也可用吗 把这个方法放在你的课堂上 private Image requestImage() { Image im

我花了大约两个小时在我的Jpanel上显示一张800*600的“背景图片”,它根本就不显示,这里怎么了

顺便说一句:有时我想在应用程序运行时更改我的背景,我不应该使用除main之外的其他方法吗?如果是的话,这种方法会是什么样子?我仍然会遇到诸如“无法进行静态引用…”之类的错误


缺少图像等资源是一个常见问题。您确定“Title.png”(区分大小写)在您的类路径中也可用吗

把这个方法放在你的课堂上

   private Image requestImage() {
        Image image = null;

        try {
            image = ImageIO.read(new URL("http://www.johnlennon.com/wp-content/themes/jl/images/home-gallery/2.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }

        return image;
    }
打电话

label.setIcon(requestImage());
如果这样做有效,则找不到Title.png。(最好将所有图像文件资源全部小写。)

此外,如果希望图像成为场景的一部分,则在JLabel上设置和设置图像是可以的。但是,对于背景图像,这是首选方法:

JPanel panel = new JPanel() {
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, null);
    }
};
尝试:


如果从静态函数调用非静态函数,则会出现“无法进行静态引用…”错误。->只需将“static”添加到新的方法头中(如“publicstaticvoidchangebackground(Jpanel面板,ImageIcon img){…}),您就可以将图像的宽度和高度设置为0,并想知道为什么它没有显示出来?希望这可以帮助在
Jpanel/JComponent
上显示图像。对于在运行时更改映像,可能是这样,可以提供帮助。
JPanel panel = new JPanel() {
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, null);
    }
};
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;

public class ImageInFrame {
    public static void main(String[] args){
      try{
        String path = "Image1.jpg";
        File file = new File(path);
        BufferedImage image = ImageIO.read(file);
        JLabel label = new JLabel(new ImageIcon(image));
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().add(label);
        f.pack();
        f.setLocation(200,200);
        f.setVisible(true); 
     catch(Exception e){
       e.printStackTrace();
     }

    }
}