首页 文章

“找不到符号方法drawImage(java.awt.image.BufferedImage,<nulltype>,int,int)”

提问于
浏览
1

好的,现在我发现 "drawImage(java.awt.image.BufferedImage,<nulltype>,int,int)" 在我的代码中?

import java.awt.*;
import javax.swing.*;
import javax.swing.JPanel;
import java.awt.event.*;
import java.awt.image.*;     
import java.io.*;
import java.util.Arrays;
import javax.imageio.ImageIO;

public class imgtest extends JFrame{
    BufferedImage img;
    Graphics g2d;
    /**
     * Creates a new instance of imgtest.
     */
    public imgtest() {
        File file = new File("test.png");
        img = ImageIO.read(file);
    }

    /**
     * @param args the command line arguments
     */
    public void paint(Graphics g)
    {
        g2d = (Graphics2D)g;
        g2d.drawImage(img, null, 0, 0);
    }

    public static void main(String[] args) {
        imgtest i = new imgtest();
        i.setSize(640,480);
        i.setVisible(true);
        i.repaint();
        // TODO code application logic here
    }
}

3 回答

  • 4

    与其他人所说的需要进行十分转换一样,它是一个Graphics2D,将其从实例变量中取出并使其成为局部变量 . 拥有仅在一个方法中使用的实例变量没有意义,并且每次调用该方法时始终都会覆盖该值 . 实例变量用于在方法调用之间保持状态...你不是在这里做的 .

    public void paint(Graphics g)
    {
        final Graphics2D g2d;
    
        g2d = (Graphics2D)g;
        g2d.drawImage(img, null, 0, 0);
    }
    
  • 1

    您已将 g2d 声明为 Graphics 而不是 Grahphcs2d 对象

    考虑更改方法调用

    g2d.drawImage(img, null, 0, 0);
    

    (Graphics2d) g2d.drawImage(img, null, 0, 0);
    

    或者像David的帖子中那样更改你对Graphics的定义

  • 0

    您已将 g2d 声明为 Graphics 对象, Graphics 没有 drawImage(BufferedImage, BufferedImageOp, int, int) 方法 . 修复:更换线路

    Graphics g2d;
    

    Graphics2D g2d;
    

    当Java在寻找存储在这样的变量中的对象的属性时,它总是使用声明的变量类型,即 Graphics . 将 g 转换为 Graphics2D 这一事实并没有什么区别,除非您实际将其存储在 Graphics2D 类型的变量中 .

相关问题