Java 设置Path2D图形的动画

Java 设置Path2D图形的动画,java,swing,drawing,path-2d,Java,Swing,Drawing,Path 2d,我正在创建一个程序,让用户在屏幕上画画,就像在MS paint中使用铅笔工具一样,然后允许用户重播创建图形的过程,就像有人在你面前画画一样 我使用Path2D完成此操作的方法,以及通过moveTo和lineTo方法,使用路径绘制一条线 我现在似乎不知道如何设置Path2D对象重画的动画。我当前的策略是创建一个新的路径2D,并使用PathIterator,迭代地将线段从旧路径添加到新路径 这就是我目前的想法: public void redrawPath() { Path2D oldPat

我正在创建一个程序,让用户在屏幕上画画,就像在MS paint中使用铅笔工具一样,然后允许用户重播创建图形的过程,就像有人在你面前画画一样

我使用Path2D完成此操作的方法,以及通过moveTo和lineTo方法,使用路径绘制一条线

我现在似乎不知道如何设置Path2D对象重画的动画。我当前的策略是创建一个新的路径2D,并使用PathIterator,迭代地将线段从旧路径添加到新路径

这就是我目前的想法:

public void redrawPath() {
    Path2D oldPath = path;
    path = new Path2D.Double();
    double[] coords = new double[100];

    PathIterator pi = oldPath.getPathIterator(new AffineTransform());

    while (!pi.isDone()) {
        pi.next();
        pi.currentSegment(coords);
        //Add segment to new path

        repaint();
    }
}
主要问题是我不知道线段的大小,所以我不知道如何调整coords数组的大小。我还没有完全弄清楚如何将这些段添加到新路径中。似乎可以使用Path2D中的append方法,尽管它似乎可以将整个路径添加到自身中


我意识到Path2D是一个形状,但我似乎找不到任何替代方法来实现这一点。

您可以使用FlattingPathIterator对形状和处理段进行PAS处理

请参见此处的移动点示例

我刚刚发现其中包含一个非常有用的示例

原来我读错了api。坐标数组的最大大小只能为7

为了让它工作,我还必须使用SwingWorker在后台更新路径。redrawPath()只是启动线程

SwingWorker的doInBackGround中的代码如下所示:

PathIterator pi = oldPath.getPathIterator(null);
while (!pi.isDone()) {
            double[] coordinates = new double[6];
            int type = pi.currentSegment(coordinates);

            switch (type) { //Decide what do based on type of segment
                case PathIterator.SEG_MOVETO:
                    tempPath.moveTo(coordinates[0], coordinates[1]);
                    break;
                case PathIterator.SEG_LINETO:
                    tempPath.lineTo(coordinates[0], coordinates[1]);
                    break;
                default:
                    break;
            }

            publish(tempPath.clone());

            pi.next();
        }

process方法更新画布上的路径并调用repaint()

我刚刚发现它包含了一个非常有用的例子。我才意识到我是在装傻,把api看错了。坐标数组的最大大小只能为坐标[6]。现在调用repaint没有任何作用,所以我想我必须使用一个助手线程在后台更新路径。