在运行时更改对象值

时间:2019-05-03 22:10:31

标签: java javafx runtime

我对JavaFX还是很陌生,我很困惑如何在JavaFX运行时更新对象。在start()方法中,我可以根据需要随意更改和创建元素,并且可以随时对其进行更新。但是,如果我做这样的事情,那是行不通的:

private static Circle circle;
public void start(Stage primaryStage) {
    Pane root = new Pane();
    Scene scene = new Scene(root, 600, 500);
    scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
    primaryStage.setScene(scene);
    primaryStage.show();

    /*
     * Large main circle
     */
    circle = new Circle();
    circle.setRadius((scene.getHeight() + scene.getWidth()) / 8);
    circle.setStrokeWidth(5);
    circle.setTranslateX(100);
    circle.setTranslateY(100);

    circle.setStroke(javafx.scene.paint.Color.BLACK);
    root.getChildren().add(circle);
}
public static void main(String[] args) throws IOException {
    launch(args);
    circle.setStroke(javafx.scene.paint.Color.GREEN);
}

在这里,我们看到我们不能只更改startstop方法之外的对象的值并期望它们发生变化,并且您不能多次调用launch(args)时间。

我问了一个与之前类似的问题,关于在窗口启动后更改其标题。对我没有任何帮助,但是我确实认为也许可以在start()方法中运行一个线程,该线程将窗口标题设置为可以在任何地方更改的字符串。我会这样:

new Thread() {
    public void run() {
        while (true) {
            primaryStage.setTitle(windowTitleString);
        }
    }
}.start();

那对我没用。在程序启动后,必须有某种方法可以更改对象的属性。我该怎么办?

编辑:我在How can I externally update a JavaFX scene?处发现,我应该只在start()函数中运行所有代码,而不要完全使用main()(除了发射)。这是一个解决方案,但这是一个好习惯吗?

0 个答案:

没有答案