我想通过覆盖paintComponent
在JPanel上绘制一些形状。我希望能够平移和缩放。使用AffineTransform
和setTransform
对象上的Graphics2D
方法可以轻松进行平移和缩放。在这之后,我可以使用g2.draw(myShape)
绘制形状。使用“世界坐标”定义形状,因此在平移时它可以正常工作,我必须在绘制之前将它们转换为画布/ 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));
}
答案 0 :(得分:1)
这是一个关闭袖口的答案,所以它没有经过测试,但我认为它会起作用。
翻译(0,高度)。这应该将原点重新定位到左下角。
按(1,-1)缩放。那应该围绕x轴翻转。
在这种情况下,我不认为操作的顺序很重要。