我目前正在学习java,但我再次遇到了一本不想工作的代码,我无法弄清楚原因。此代码段来自Head First Java
import javax.swing.*;
import java.awt.*;
public class SimpleGui {
public static void main (String[] args){
JFrame frame = new JFrame();
DrawPanel button = new DrawPanel();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(button);
frame.setSize(300,300);
frame.setVisible(true);
}
}
import java.awt.*;
import java.lang.*;
public class DrawPanel extends JPanel {
private Image image;
public DrawPanel(){
image = new ImageIcon("cat2.jpg").getImage();
}
public void paintComponent(Graphics g){
g.drawImage(image,3,4,this);
}
}
图像与我的类文件位于同一目录中,并且图像未显示。我在这里缺少什么?
答案 0 :(得分:1)
1)在您的paintComponent()
中,您必须致电super.paintComponent(g);
。详细了解custom paintings。
2)而不是Image
使用BufferedImage
,因为Image是它的抽象包装器。
3)使用ImageIO
而不是像Image
那样创建new ImageIcon("cat2.jpg").getImage();
4)对项目内的资源使用URL
。
我更改了您的代码,它可以帮助您:
class DrawPanel extends JPanel {
private BufferedImage image;
public DrawPanel() {
URL resource = getClass().getResource("cat2.jpg");
try {
image = ImageIO.read(resource);
} catch (IOException e) {
e.printStackTrace();
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 3, 4, this);
}
}