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