2010-04-01 52 views
0

我想通過覆蓋paintComponent在JPanel上繪製一些形狀。我希望能夠平移和縮放。在Graphics2D對象上使用AffineTransformsetTransform方法輕鬆進行平移和縮放。做完這些之後,我可以用easyli繪製形狀g2.draw(myShape)這些形狀是用「世界座標」定義的,所以在平移時它可以很好地工作,我必須在繪製之前將它們轉換爲畫布/ JPanel座標。如何使用另一個象限在座標上繪製JPanel?

現在我想更改座標的quadrant。從JPanel和計算機常用的第四象限到用戶最熟悉的第一象限。 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軸翻轉。

我不認爲在這種情況下操作的順序很重要。