2012-01-25 6 views
0

캔버스에 경로를 그릴 수있는 응용 프로그램을 만들고 싶습니다. 문제는이 캔버스를 지속적으로 업데이트해야한다는 것입니다.Java 캔버스에서 추첨을 업데이트하십시오.

현재 나는 그것을 할 수 있지만 매번 모든 경로를 다시 그려야하므로 모든 포인트를 메모리에 저장해야합니다. 새 지점을 추가하여 추첨을 간단히 업데이트하는 것을 선호합니다.

가능합니까?

현재 내 코드는 다음과 같습니다

public class MyCanvas extends Canvas{ 
     private static final long serialVersionUID = 1L; 
     public MyCanvas(){} 
     public void paint(Graphics graphics){ 
      super.paint(graphics); 
      graphics.setColor(Color.green); 
      // points is an ArrayList of Point2D 
      for (Iterator iterator = points.iterator(); iterator.hasNext();) { 
       Point2D point2d = (Point2D) iterator.next(); 
       graphics.fillOval((int)((canvas.getWidth()/2.0) + point2d.getX()), (int)((canvas.getHeight()/2.0) + point2d.getY()), 5, 5); 
      } 
     } 
    } 

감사합니다!

편집

이 현재의 솔루션입니다 :

PanelCanvas canvasPanel; 
... 
public void drawCircle(int x, int y){ 
    Graphics2D g2d = bufferedImage.createGraphics(); 
    g2d.setColor(Color.green); 
    g2d.setBackground(Color.white); 
    g2d.fillOval((int)((panelCanvas.getWidth()/2.0) + x/10.0), (int)((panelCanvas.getHeight()/2.0) + y/10.0), 5, 5); 
    panelCanvas.repaint(); 
} 

public class CanvasPanel extends JPanel{ 
    public void paintComponent(Graphics graphics){ 
     super.paintComponents(graphics); 
     Graphics2D g2d = (Graphics2D)graphics; 
     g2d.setBackground(Color.white); 
     g2d.drawImage(bufferedImage, null, 0, 0); 
    } 
} 
+1

왜이 천년기에 AWT 구성 요소를 사용하여 코딩하고 있습니까? 그 (것)들을 사용한 대부분의 사람들은 어떻게 잊어 버렸습니다. 또한 순수 AWT인데 왜 [tag : swing] 태그를 추가 했습니까? 질문 내의 질문 .. –

+0

@AndrewThompson 캔버스가 스윙 GUI에 내장되어 있습니다. AWT.Canvas를 대체하기 위해 당신은 무엇을 제안합니까? 감사! – Maverik

+0

내 대답을 편집하십시오. –

답변

5

BufferedImage에 (무엇이든) 점을 그립니다. paint() 동안 BufferedImage을 그립니다.


JRE는 시각적 인 인공물이나 속도 저하없이 수천 가지의 개체를 페인트로 그릴 수 있습니다.


캔버스는 스윙 GUI에 포함된다. AWT.Canvas를 대체하기 위해 당신은 무엇을 제안합니까?

JComponent (사용자 정의 렌더링 용) JPanel (사용자 정의 렌더링 용) JComponent이이 사용 사례에 더 적합 할 것 같습니다.

paint(Graphics) 대신 paintComponent(Graphics)을 무시하십시오. 나머지 조언은 동일합니다.

+0

솔루션이 작동합니다. 단 하나의 문제, 이미지 배경이 검은 색입니다. 이미지 배경과 패널 배경을 설정하려고했지만 작동하지 않았습니다. 문제의 새 구현을 참조하십시오. 감사 – Maverik

관련 문제