我正试图在.png
上画一个JPanel
。我使用ImageIcon
构造函数导入它,并将其绘制到自定义面板的paintComponent
中。
我的斯考斯
package mypackage;
import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MyPanel extends JPanel {
static JFrame frame;
static MyPanel panel;
static ImageIcon icon;
public static void main(String[] args) {
icon = new ImageIcon(MyPanel.class.getResource("MyImage.png"));
frame = new JFrame();
panel = new MyPanel();
frame.setSize(500, 500);
frame.add(panel);
frame.setVisible(true);
frame.repaint();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
icon.paintIcon(panel, g, 100, 100);
}
}
我希望这张图像,这是一个白色背景上的几个形状,将显示在(100, 100)
的面板上。相反,空白屏幕:
没有发生错误这一事实意味着程序正在正确地查找文件。
映像在我的Eclipse项目中,与类在同一个包中:
为什么会发生这种情况?我该怎么解决呢?
发布于 2015-10-27 15:03:45
由于代码看起来是正确的,我建议资源没有正确加载。
将png文件放在类路径中。例如:我会有一个目录:
~/ProjectRoot/resources/mypackage/
然后在类路径中包含资源。在eclipse中,您可以通过
项目->属性-> Java生成路径->添加类文件夹
BufferedImage img =
ImageIO.read(MyPanel.class.getResourceAsStream("MyImage.png"));
如果找不到图像,则会引发异常。您可以使用它来生成一个ImageIcon。
发布于 2015-10-27 15:06:18
当您使用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;
}
}
https://stackoverflow.com/questions/33370545
复制相似问题