我对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);
}
在这里,我们看到我们不能只更改start
或stop
方法之外的对象的值并期望它们发生变化,并且您不能多次调用launch(args)
时间。
我问了一个与之前类似的问题,关于在窗口启动后更改其标题。对我没有任何帮助,但是我确实认为也许可以在start()
方法中运行一个线程,该线程将窗口标题设置为可以在任何地方更改的字符串。我会这样:
new Thread() {
public void run() {
while (true) {
primaryStage.setTitle(windowTitleString);
}
}
}.start();
那对我没用。在程序启动后,必须有某种方法可以更改对象的属性。我该怎么办?
编辑:我在How can I externally update a JavaFX scene?处发现,我应该只在start()
函数中运行所有代码,而不要完全使用main()
(除了发射)。这是一个解决方案,但这是一个好习惯吗?