[英]How can I draw on JPanel using another quadrant for the coordinates?
我想通過重寫paintComponent
在JPanel上繪制一些形狀。 我希望能夠平移和縮放。 使用AffineTransform
和Graphics2D
對象上的setTransform
方法可以輕松完成平移和縮放。 完成此操作后,我可以使用g2.draw(myShape)
輕松繪制形狀。這些形狀是使用“世界坐標”定義的,因此在平移時效果很好,在繪制之前必須將其轉換為畫布/ JPanel坐標。
現在,我想更改坐標的象限 。 從JPanel和計算機經常使用的第四象限到用戶最熟悉的第一象限。 X相同,但Y軸應向上而不是向下增加。 通過new Point(origo.x, -origo.y);
重新定義origo很容易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));
}
這是一個現成的答案,因此未經測試,但我認為它會起作用。
平移(0,高度)。 那應該將原點重新定位到左下方。
按(1,-1)縮放。 那應該繞x軸翻轉它。
在這種情況下,我認為操作順序並不重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.