【问题标题】:Image drawing with PaintComponent Java使用 PaintComponent Java 绘制图像
【发布时间】:2013-11-21 14:30:42
【问题描述】:

我目前正在学习 java,但我又遇到了书中的一段代码,它不想工作,我不知道为什么。这段代码 sn-p 来自 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);
    }
}

图像位于我的类文件所在的同一目录中,并且图像未显示。我在这里错过了什么?

【问题讨论】:

    标签: java image swing paintcomponent


    【解决方案1】:

    1) 在您的paintComponent() 中,您必须调用super.paintComponent(g);。阅读有关custom paintings 的更多信息。

    2) 使用 BufferedImage 代替 Image,因为 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);
        }
    }
    

    【讨论】:

    • 嗨,调用 super.paintComponent 是不必要的,没有它也可以工作。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    相关资源
    最近更新 更多