簡體   English   中英

如何使用另一個象限來繪制JPanel坐標?

[英]How can I draw on JPanel using another quadrant for the coordinates?

我想通過重寫paintComponent在JPanel上繪制一些形狀。 我希望能夠平移和縮放。 使用AffineTransformGraphics2D對象上的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM