我想通过覆盖在 JPanel 上绘制一些形状paintComponent
。我希望能够平移和缩放。平移和缩放很容易使用AffineTransform
和对象setTransform
上的方法Graphics2D
。这样做之后,我可以用“世界坐标”定义形状来轻松绘制形状,g2.draw(myShape)
因此在平移时它可以正常工作,我必须在绘制之前将它们转换为画布/JPanel 坐标。
现在我想改变坐标的象限。从JPanel和电脑经常使用的第四象限到用户最熟悉的第一象限。X 是相同的,但 Y 轴应该向上而不是向下增加。很容易通过以下方式重新定义 origonew 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));
}