Java Swing移动Java.awt.Shape

Java Swing移动Java.awt.Shape,java,swing,drawing,java-2d,Java,Swing,Drawing,Java 2d,我们有一个显示地图的应用程序。这个Swing应用程序主要使用绘制一组s,一切正常 现在,我必须扩展这个应用程序,允许我们的用户在地图上编辑移动的形状。但是java.awt.Shapes上没有translate或move方法。所以我不能改变形状的java.awt.Point的位置 我已尝试覆盖,以便应用与形状位置匹配的平移。但是这很棘手,因为这个方法已经接受了一个我必须合并的转换,而且因为为了正确,PathIterator应该从0开始,因为它是相对于形状位置的 无论如何,这是行不通的,因为Grap

我们有一个显示地图的应用程序。这个Swing应用程序主要使用绘制一组s,一切正常

现在,我必须扩展这个应用程序,允许我们的用户在地图上编辑移动的形状。但是java.awt.Shapes上没有translate或move方法。所以我不能改变形状的java.awt.Point的位置

我已尝试覆盖,以便应用与形状位置匹配的平移。但是这很棘手,因为这个方法已经接受了一个我必须合并的转换,而且因为为了正确,PathIterator应该从0开始,因为它是相对于形状位置的

无论如何,这是行不通的,因为Graphics2D似乎并不总是使用这种方法来绘制java.awt.Shape

所以现在,我觉得有点失落。另一个解决方案是让形状自己绘制,但我必须重写应用程序的一部分。这不是问题,但我必须知道哪种可能是最好的解决方案:

找到移动java.awt.Shape的技巧 这似乎是最好的解决办法,但我不知道怎么做

将应用程序更改为具有自绘制形状 可能很好,但我必须计算myslef和其他更复杂的方法


可以基于形状创建区域,并使用转换坐标调用变换传递仿射变换

Area a=new Area(sourceShape);
AffineTransform at=new AffineTransform();
at.translate(horizontalShift, verticalShift);
Shape transformedShape=a.transform(at);
但我还没有测试过

但是java.awt.Shapes上没有translate或move方法

见,其中:

通过此变换变换后,返回由指定形状的几何体定义的新形状对象

当然,还有

将Graphics2D上下文的原点转换为当前坐标系中的点x,y


@安德烈·霍姆普森的解决方案似乎是最好的。我要试试看

对于那些感兴趣的人,因为我必须进步。我创建了一个接口,它扩展了java.awt.Shape,并为其位置属性创建了一个setter。
每个特定形状都必须实现更新其位置所需的代码,但这比移动任何形状都要容易得多。

是否检查了仿射变换形状?请使用仿射变换形状转换用于绘制形状的图形上下文,或使用仿射变换形状使用其CreateTransform来转换形状methodAffineTransform有一个createTransformedShape方法,它返回一个形状,这非常简单;谢谢GraphicsD.translatex,y不起作用,因为形状的路径是绝对路径。因此,如果我平移和绘制,那么形状应该放错位置。GraphicsD.translatex,y将不起作用。。当然会的!但是使用createTransformedShapeShape更容易,因为您不需要在绘制每个形状之间将图形2D重置为原点。