好的,现在我已经在java中使用了drawImage一段时间了,这种情况从未发生过。为什么我的代码中找不到"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
}
}
答案 0 :(得分:4)
您已将g2d
声明为Graphics
个对象,Graphics
没有drawImage(BufferedImage, BufferedImageOp, int, int)
方法。修复:替换
Graphics g2d;
与
Graphics2D g2d;
当Java正在寻找存储在这样的变量中的对象的属性时,它总是使用声明的变量类型,即Graphics
。您将g
投放到Graphics2D
这一事实并没有什么不同,除非您实际将其存储在Graphics2D
类型的变量中。
答案 1 :(得分:1)
除了其他人所说的需要去掉它之外,还有一个Graphics2D,将它从实例变量中取出并使其成为局部变量。拥有一个仅在一个方法中使用的实例变量并且每次调用该方法时始终都会覆盖值是没有意义的。实例变量用于在方法调用之间保持状态......你在这里没有这样做。
public void paint(Graphics g)
{
final Graphics2D g2d;
g2d = (Graphics2D)g;
g2d.drawImage(img, null, 0, 0);
}
答案 2 :(得分:0)
您已将g2d
声明为Graphics
而非Grahphcs2d
对象
考虑从
更改方法调用 g2d.drawImage(img, null, 0, 0);
到
(Graphics2d) g2d.drawImage(img, null, 0, 0);
或更改您的图形定义,如David的帖子