Kotlin 动态更新FX中的多段线点

Kotlin 动态更新FX中的多段线点,kotlin,javafx,tornadofx,Kotlin,Javafx,Tornadofx,这个问题有点简单化了,但我自己无法解决。。。我尝试使用JavaFX时间线来更新多段线点。到目前为止,我得到的信息如下: class MainView : View("Hello TornadoFX") { var myLine: Polyline by singleAssign() val myTimeline = timeline { cycleCount = INDEFINITE } override val root =

这个问题有点简单化了,但我自己无法解决。。。我尝试使用JavaFX时间线来更新多段线点。到目前为止,我得到的信息如下:

class MainView : View("Hello TornadoFX") {
    var myLine: Polyline by singleAssign()
    val myTimeline = timeline {
        cycleCount = INDEFINITE
    }

    override val root = hbox {
        myLine = polyline(0.0, 0.0, 100.0, 100.0)
        myTimeline.apply {
            keyFrames += KeyFrame((1/10.0).seconds, {
                myLine.points.forEachIndexed { i, d ->
                    myLine.points[i] = d + 1
                }
                println(myLine.points)
            })
            play()
        }
    }
}
尽管点列表会更新值,如打印时所示,但更改不会反映在ui中


非常感谢你的帮助

我之前没有使用过TornadFX,所以我尝试使用普通的JavaFX。点更新时,UI似乎正在更新。问题可能与您使用TornadoFX的实现有关

请检查下面的工作示例

import javafx.animation.Animation;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Polyline;
import javafx.stage.Stage;
import javafx.util.Duration;

public class PolyLinePointsUpdateDemo extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        Pane root = new Pane();
        Scene scene = new Scene(root, 600,600);
        primaryStage.setScene(scene);
        primaryStage.setTitle("PolyLine Points Update");
        primaryStage.show();

        Polyline line = new Polyline(0.0, 0.0, 100.0, 100.0);
        root.getChildren().add(line);

        Timeline timeline = new Timeline();
        timeline.getKeyFrames().add(new KeyFrame(Duration.millis(250), e->{
            for (int i = 0; i < line.getPoints().size(); i++) {
                double d = line.getPoints().get(i);
                line.getPoints().set(i, d+1);
            }
            System.out.println(line.getPoints());
        }));
        timeline.setCycleCount(Animation.INDEFINITE);
        timeline.play();
    }

    public static void main(String... a){
        Application.launch(a);
    }
}
导入javafx.animation.animation;
导入javafx.animation.KeyFrame;
导入javafx.animation.Timeline;
导入javafx.application.application;
导入javafx.scene.scene;
导入javafx.scene.layout.Pane;
导入javafx.scene.shape.Polyline;
导入javafx.stage.stage;
导入javafx.util.Duration;
公共类PolyLinePointsUpdateDemo扩展了应用程序{
@凌驾
public void start(Stage primaryStage)引发异常{
窗格根=新窗格();
场景=新场景(根,600600);
初级阶段。场景(场景);
setTitle(“多段线点更新”);
primaryStage.show();
多段线=新的多段线(0.0,0.0,100.0,100.0);
root.getChildren().add(行);
时间线=新时间线();
timeline.getKeyFrames().add(新的关键帧)(持续时间.millis(250),e->{
对于(int i=0;i
发现问题仅仅是使用hbox作为父布局,而不是使用窗格,该窗格使用绝对坐标处理孩子的定位。

已经解决了,谢谢您的时间