使用PaintComponent Java绘制图像

时间:2013-11-21 14:30:42

标签: java image swing paintcomponent

我目前正在学习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);
    }
}

图像与我的类文件位于同一目录中,并且图像未显示。我在这里缺少什么?

1 个答案:

答案 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);
    }
}