Хорошо, теперь я уже некоторое время использую drawImage в java, а такого раньше никогда не было. Почему он не может найти "drawImage(java.awt.image.BufferedImage,<nulltype>,int,int)" в моем коде?
"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 <code>imgtest</code>. */ 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 } }
Вы объявили g2d как объект Graphics, а Graphics не имеет метода drawImage(BufferedImage, BufferedImageOp, int, int). Исправлено: заменить строку
g2d
Graphics
drawImage(BufferedImage, BufferedImageOp, int, int)
Graphics g2d;
с
Graphics2D g2d;
Когда Java ищет атрибуты объекта, который хранится в такой переменной, как эта, она всегда использует объявленный тип переменной, а именно Graphics. Тот факт, что вы преобразовали g в Graphics2D, не имеет значения, если вы на самом деле не сохраните его в переменной типа Graphics2D.
g
Graphics2D
Наряду с тем, что другие говорили о необходимости декальцировать, это Graphics2D, извлекать его из переменных экземпляра и делать его локальной переменной. Нет смысла иметь переменную экземпляра, которая используется только в одном методе и всегда имеет значение, перезаписываемое при каждом вызове метода. Переменные экземпляра используются для сохранения состояния между вызовами методов ... здесь вы этого не делаете.
public void paint(Graphics g) { final Graphics2D g2d; g2d = (Graphics2D)g; g2d.drawImage(img, null, 0, 0); }
Вы объявили g2d как Graphics, а не Grahphcs2d объект
Grahphcs2d
Попробуйте либо изменить вызов метода с
g2d.drawImage(img, null, 0, 0);
до
(Graphics2d) g2d.drawImage(img, null, 0, 0);
или измените определение графики, как в сообщении Дэвида