2012-04-13 5 views
1

graphics2D를 사용하고 싶지만 그래픽을 표시 할 수 없습니다. 이것을 repaint()를 사용할 수있게하는 더 좋은 방법이 있습니까? 결국 나는 이미지를 배경으로 설정하고 그 위에 그림을 그릴 수 있고 프레임의 내용을 이미지로 저장하려고합니다. 도대체이 롤 무엇을하고 있는지페인트에서 graphics2D를 사용하는 방법 또는 더 좋은 방법이 있습니까?

import java.awt.image.*; 
import javax.imageio.ImageIO; 
import javax.swing.*; 

import java.io.File; 
import java.io.IOException; 
import java.net.URL; 

import javax.swing.JApplet; 
import java.awt.*; 

// assume that the drawing area is 150 by 150 
public class test extends JApplet 
{ 
    final int radius = 25; 
    int width = 200, height = 200; 

BufferedImage img = new BufferedImage(
    width, height, BufferedImage.TYPE_INT_ARGB); 

    public void paint () 
    { 
    Graphics2D g = img.createGraphics(); 
    g.setColor(Color.orange); 
    g.fillRect(0, 0, 150, 150); 
    g.setColor(Color.black); 

    g.drawOval((150/2 - radius), (150/2 - radius), radius*2, radius*2); 
    } 
} 
+0

1)'paint()'메소드가 호출되지 않는다는 것을 확인하기 위해 @Override 표기법을 사용하십시오. 2) * "프레임의 내용을 이미지로 저장"* a) 프레임이 아니라 애플릿입니다. b) 기본적으로 애플릿은 파일을 저장할 수 없습니다. 3) 애플릿은 응용 프로그램보다 개발하고 디버그하는 것이 훨씬 복잡합니다. 잠시 동안 애플릿을 사용하지 않는 것이 좋습니다. 4) 도대체 왜 마지막 두 번째 마지막 닫기 전에 15 개의 공백 라인이 있었습니까?''? –

답변

1

좋아하므로,

  1. 당신은 public void paint() 있나요? 당신은 그래픽 객체가 필요합니다. public void paint(Graphics g)은 애플릿이 초기화 될 때 자동으로 호출되는 기본 메소드와 같습니다.

  2. 그렇게 Graphics2D g2d = (Graphics2D) g;

  3. 당신은 너무 더블 버퍼링에 좀 더 정보 :

  4. 검색 할 기본 그래픽 g 객체를 사용하고 같은 Graphics2D 객체로 캐스팅 할 때 당신은 Graphics2D g = img.createGraphics();

어쨌든 ...이 코드는 그래서 당신은 :) 내가 Runnable를 구현하는 방법을

PS 참고 원하는 그것을 걸릴 작품; Graphics2D 코드 만 사용하려는 경우에는이 작업을 수행 할 필요가 없습니다. 클래스를 스레드로 만들고 게임 프레임 속도에 사용됩니다.

호프 this helped.

import java.applet.*; 
import java.awt.*; 


public class Test extends Applet implements Runnable{ 

public boolean isRunning = false; 
public int radius = 25; 


public void start() { 
    isRunning = true; 
    new Thread(this).start(); 
} 

public void stop() { 
    isRunning = false; 
} 

public void paint(Graphics g) { 
    //Create Graphics2D object, cast g as a Graphics2D 
    Graphics2D g2d = (Graphics2D) g; 
    g2d.setColor(Color.ORANGE); 
    g2d.fillRect(0, 0, 150, 150); 

    g2d.setColor(Color.BLACK); 
    g2d.drawOval((150/2 - radius), (150/2 - radius), radius * 2, radius * 2); 
} 

public void run() { 

    while (isRunning) { 
     repaint(); 
     try { 
      Thread.sleep(17); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 


} 
관련 문제