2009-03-02 3 views
1

자, 이제 자바에서 drawImage를 사용하고 있습니다. 내 코드에서 "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 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 
    } 
} 

답변

4
당신은 Graphics 대상으로 g2d를 선언 한

GraphicsdrawImage(BufferedImage, BufferedImageOp, int, int) 방법이 없습니다. 수정 : 자바는이 같은 변수에 저장된 객체의 속성을 찾는 경우

Graphics2D g2d; 

와 라인

Graphics g2d; 

교체, 항상 변수, 즉 Graphics의 선언 형식을 사용합니다. gGraphics2D으로 캐스팅 한 사실은 Graphics2D 유형의 변수에 실제로 저장하지 않는 한 차이가 없습니다.

0

당신은 Graphicsg2d하지

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

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

에서 메서드 호출을 변경하거나 고려한다 다윗과 같이 그래픽의 당신의 정의를 변경 Grahphcs2d 객체 선언 게시물

1

Decalre가 필요하다고 말한 것과 함께 Graphics2D라고하는 것과 함께 인스턴스 변수에서 꺼내서 로컬 변수로 만듭니다. 하나의 메소드에서만 사용되는 인스턴스 변수를 갖는 데는 아무런 포인트가 없으며 메소드가 호출 될 때마다 항상 값이 초과됩니다. 인스턴스 변수는 메소드 호출간에 상태를 유지하는 데 사용됩니다 ... 여기서는 그렇게하지 않습니다.

public void paint(Graphics g) 
{ 
    final Graphics2D g2d; 

    g2d = (Graphics2D)g; 
    g2d.drawImage(img, null, 0, 0); 
} 
+0

그는 코드에 표시된 것보다 더 많은 일을 할 수 , 내 경험에) – hhafez

+0

는 더 자주 이상이없는 것을 유감스럽게도 그렇지 않습니다. – TofuBeer

관련 문제