好的,现在我发现 "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 回答
与其他人所说的需要进行十分转换一样,它是一个Graphics2D,将其从实例变量中取出并使其成为局部变量 . 拥有仅在一个方法中使用的实例变量没有意义,并且每次调用该方法时始终都会覆盖该值 . 实例变量用于在方法调用之间保持状态...你不是在这里做的 .
您已将
g2d
声明为Graphics
而不是Grahphcs2d
对象考虑更改方法调用
至
或者像David的帖子中那样更改你对Graphics的定义
您已将
g2d
声明为Graphics
对象,Graphics
没有drawImage(BufferedImage, BufferedImageOp, int, int)
方法 . 修复:更换线路同
当Java在寻找存储在这样的变量中的对象的属性时,它总是使用声明的变量类型,即
Graphics
. 将g
转换为Graphics2D
这一事实并没有什么区别,除非您实际将其存储在Graphics2D
类型的变量中 .