Javafx как правильно переключать сцены?

#javafx #fxml #scene

#javafx #fxml #сцена

Вопрос:

Я искал везде в Интернете, но не смог найти прямого ответа на этот простой вопрос: каков наилучший способ переключения сцен в приложении JavaFX? У меня есть несколько файлов FXML и контроллер для каждого из них, и я хочу иметь возможность переключаться между ними как можно быстрее (размер экрана должен оставаться прежним, все в окне должно оставаться неизменным, кроме содержимого).

Есть несколько способов, которые я мог бы придумать, самый распространенный способ — загрузить файл FXML с помощью FXMLLoader, а затем создать новую сцену, а затем установить эту сцену в качестве сцены и, наконец, показать сцену. Это работает, но мне не кажется эффективным, потому что каждый раз, когда я переключаю страницы, программе приходится создавать совершенно новую сцену, а затем назначать ее сцене. Почему этот метод используется чаще всего?

 Parent root = FXMLLoader.load(getClass().getResource("newPage.fxml"));
Stage.setScene(new Scene(root));
Stage.show();
  

Я нашел другой способ, который заключается в простом изменении корневого каталога текущей сцены (то есть, по сути, замените файл FXML сцены на новый). Кажется, что это немного быстрее и с меньшими задержками, но хороший ли это способ делать что-то?

 Parent root = FXMLLoader.load(getClass().getResource("newPage.fxml"));
Stage.getScene().setRoot(root);
Stage.show();
  

Каков наилучший способ переключения между страницами (сценами)?

Комментарии:

1. Оба работают нормально, если нет ошибок. Лучшего не существует. Используйте тот, который лучше всего подходит для вашей ситуации.

Ответ №1:

Принимая во внимание ваши собственные требования «Размер экрана должен оставаться неизменным, все в окне должно оставаться неизменным, кроме содержимого», тогда второй метод кажется естественным, не так ли? Поскольку это также немного быстрее и работает в соответствии с вашими собственными выводами, я бы не стал дважды думать о выборе.

Комментарии:

1. Принято к сведению. Спасибо!