Java ImageIcon.paintIcon不在JPanel上绘制图像

Java ImageIcon.paintIcon不在JPanel上绘制图像,java,swing,jpanel,imageicon,Java,Swing,Jpanel,Imageicon,我试图在JPanel上画一个.png。我使用ImageIcon构造函数导入它,并在自定义面板的paintComponent中绘制它 我的: 我希望在面板上的(100100)处显示图像,它只是白色背景上的几个形状。取而代之的是一个空白屏幕: 没有发生错误这一事实意味着程序正在正确地查找文件 映像与类位于同一个包中的我的Eclipse项目中: 为什么会这样?如何修复它?由于代码看起来正确,我建议资源没有正确加载 将png文件放在类路径中。我会有一个目录: ~/ProjectRoot/resour

我试图在
JPanel
上画一个
.png
。我使用
ImageIcon
构造函数导入它,并在自定义面板的
paintComponent
中绘制它

我的:

我希望在面板上的
(100100)
处显示图像,它只是白色背景上的几个形状。取而代之的是一个空白屏幕:

没有发生错误这一事实意味着程序正在正确地查找文件

映像与类位于同一个包中的我的Eclipse项目中:


为什么会这样?如何修复它?

由于代码看起来正确,我建议资源没有正确加载

将png文件放在类路径中。我会有一个目录:

~/ProjectRoot/resources/mypackage/
然后在类路径中包含资源

项目->属性->Java构建路径->添加类文件夹


如果找不到图像,则会引发异常。您可以使用它制作一个图像图标。

由于代码看起来正确,我建议资源没有正确加载

将png文件放在类路径中。我会有一个目录:

~/ProjectRoot/resources/mypackage/
然后在类路径中包含资源

项目->属性->Java构建路径->添加类文件夹


如果找不到图像,则会引发异常。您可以使用它制作图像图标。

当您使用图像图标从文件中读取图像时,您不会得到读取是否成功的指示

这是我使用ImageIO读取图像的GUI:

这是图像,与Java源代码位于同一目录中:

这是您的代码,我使用ImageIO读取来读取图像,并使用paintComponent方法绘制图像

package com.ggl.testing;

import java.awt.Graphics;
import java.awt.Image;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class MyPanel extends JPanel {

    private static final long serialVersionUID = -9008812738915944216L;

    private static JFrame frame;
    private static MyPanel panel;
    private static Image image;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                image = getImage();
                frame = new JFrame();
                panel = new MyPanel();
                frame.setSize(500, 500);
                frame.add(panel);
                frame.setVisible(true);
            }
        });
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 100, 100, MyPanel.this);
    }

    private static Image getImage() {
        Image image = null;
        try {
            image = ImageIO.read(MyPanel.class.getResource("maze.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return image;
    }
}

使用ImageIcon从文件中读取图像时,不会显示读取是否成功

这是我使用ImageIO读取图像的GUI:

这是图像,与Java源代码位于同一目录中:

这是您的代码,我使用ImageIO读取来读取图像,并使用paintComponent方法绘制图像

package com.ggl.testing;

import java.awt.Graphics;
import java.awt.Image;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class MyPanel extends JPanel {

    private static final long serialVersionUID = -9008812738915944216L;

    private static JFrame frame;
    private static MyPanel panel;
    private static Image image;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                image = getImage();
                frame = new JFrame();
                panel = new MyPanel();
                frame.setSize(500, 500);
                frame.add(panel);
                frame.setVisible(true);
            }
        });
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 100, 100, MyPanel.this);
    }

    private static Image getImage() {
        Image image = null;
        try {
            image = ImageIO.read(MyPanel.class.getResource("maze.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return image;
    }
}

不要在paintComponent方法中创建ImageIcon。还可以试着在面板中画一个圆圈或其他东西。@matt Moving
icon=newimageicon(MyPanel.class.getResource(“MyImage.png”)
main
并在
main
上添加
static ImageIcon图标
并不能解决问题。@matt另外,添加
((Graphics2D)g)。绘制(新的Ellipse2D.Double(100100100100100))
to
paintComponent
成功绘制了一个圆。似乎您的图像图标没有正确加载。例如,您的源代码中有png文件。它需要在类路径中。不要在paintComponent方法中创建ImageIcon。还可以试着在面板中画一个圆圈或其他东西。@matt Moving
icon=newimageicon(MyPanel.class.getResource(“MyImage.png”)
main
并在
main
上添加
static ImageIcon图标
并不能解决问题。@matt另外,添加
((Graphics2D)g)。绘制(新的Ellipse2D.Double(100100100100100))
to
paintComponent
成功绘制了一个圆。似乎您的图像图标没有正确加载。例如,您的源代码中有png文件。它需要在类路径中。