2010-04-01 4 views
0

paintComponent을 재정 의하여 JPanel에 일부 모양을 그립니다. 팬하고 확대/축소 할 수 있어야합니다. 패닝 및 확대/축소는 개체의 AffineTransformsetTransform 메서드로 수행하기 쉽습니다. 그렇게하면 모양을 그릴 수 있습니다. g2.draw(myShape) 모양이 "세계 좌표"로 정의되므로 패닝 할 때 잘 작동하므로 그리기 전에 캔버스/JPanel 좌표로 변환해야합니다.좌표에 다른 사분면을 사용하여 JPanel에서 그릴 방법은 무엇입니까?

이제 좌표를 quadrant으로 변경하고 싶습니다. JPanel과 컴퓨터가 자주 사용하는 4 사분면부터 사용자가 가장 익숙한 1 사분면까지. X는 같지만 Y 축은 아래쪽이 아닌 위쪽으로 증가해야합니다. new Point(origo.x, -origo.y);

그러나이 사분면의 모양을 어떻게 그릴 수 있습니까? 나는 캔버스 좌표로 가지지 않고 모양 (세계 좌표로 정의)의 좌표를 유지하고 싶습니다. 그래서 나는 어떤 식 으로든 그것들을 변형 시키거나, Graphics2D 객체를 변형 할 필요가 있습니다. 을 효율적으로하고 싶습니다. AffineTransform으로도이 작업을 수행 할 수 있습니까? 도면에 대한

내 코드 :

 public void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      Graphics2D g2 = (Graphics2D)g; 
      g2.setColor(Color.blue); 

      AffineTransform at = g2.getTransform(); 
      at.translate(-origo.x, -origo.y); 
      at.translate(0, getHeight()); 
      at.scale(1, -1); 
      g2.setTransform(at); 
      g2.drawLine(30, 30, 140, 20); 
      g2.draw(new CubicCurve2D.Double(30, 65, 23, 45, 23, 34, 67, 58)); 
     } 

답변

1

이 커프 대답거나 끕니다이다, 그래서 검증되지 않은,하지만 나는 그것이 작동 것이라 생각합니다.

번역자 (0, 높이). 원점을 왼쪽 하단으로 재조정해야합니다. 하여

스케일 (1, -1). 그것은 x 축에 대해 뒤집어 야합니다.

나는이 경우 작업 문제의 순서를 생각하지 않습니다.

관련 문제