Я довольно новичок в 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();
Это не сработало для меня, хотя. Должен быть какой-то способ изменить свойства объекта после запуска программы. Как я могу это сделать?
РЕДАКТИРОВАТЬ: Я нашел на Как я могу внешне обновить сцену JavaFX? , что я должен просто запустить весь свой код в функции start()
, а не даже с помощью main()
вообще (кроме запуска). Это решение, но это хорошая практика?