我想通過覆蓋paintComponent
在JPanel上繪製一些形狀。我希望能夠平移和縮放。在Graphics2D
對象上使用AffineTransform
和setTransform
方法輕鬆進行平移和縮放。做完這些之後,我可以用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));
}