Чтобы очень кратко продемонстрировать оба подхода. используя FXML, вот как можно переключать сцены. Имейте в виду, что это всего лишь очень простой пример, который не отражает использование какого-либо реального приложения (вы не будете просто переключать сцены в методе запуска приложения).
Код: Выделить всё
public class Application extends javafx.application.Application {
@Override
public void start(Stage stage) throws IOException {
Scene scene1 = new Scene(new FXMLLoader(Application.class.getResource("gui1.fxml")).load());
stage.setScene(scene1); // initially set your main scene
// then anywhere in any controller you may want to change to a different gui like so
Scene scene2 = new Scene(new FXMLLoader(Application.class.getResource("gui2.fxml")).load());
stage.setScene(scene2);
}
}
Код: Выделить всё
public class Application extends javafx.application.Application {
@Override
public void start(Stage stage) throws IOException {
Scene scene = new Scene(new FXMLLoader(Application.class.getResource("gui1.fxml")).load());
stage.setScene(scene); // initially set your main scene
// then anywhere in any controller you may want to change to a different gui like so
Parent newRoot = new FXMLLoader(Application.class.getResource("gui2.fxml")).load();
scene.setRoot(newRoot);
}
}
Некоторые плюсы и минусы заключаются в том, что создание новых сцен обходится дороже, чем замена корневого узла, но помогает полностью дифференцировать разные графические интерфейсы. Другие говорят о хранении информации о состоянии в сцене, а третьи снова говорят, что сцены и этапы с отдельными объектами инфраструктуры следует обрабатывать так, чтобы они не путались, кроме как просто инициализировать основное окно и просто выполнять замену корня представления остальных, если это необходимо.
Также обратите внимание, что речь идет не о замене частей графического интерфейса, а о графическом интерфейсе в целом.
Простым примером может быть следующее:
Приложение, содержащее несколько небольших инструментов для принципиально разных случаев использования. Начальное окно можно рассматривать как своего рода «панель запуска» для различных инструментов. Каждый инструмент имеет отдельный графический интерфейс и может быть открыт нажатием кнопки на панели запуска. Окно (сцена) остается прежним, меняется только содержимое и есть кнопка возврата в лаунчер. Различные графические интерфейсы не имеют ничего общего и не обмениваются никакими данными.
Конечно, есть и другие способы реализовать это, например. полностью используя несколько окон или группируя инструменты на вкладках в одном окне, но я использовал приведенный выше пример специально, чтобы иметь простой вариант использования для основного вопроса замены целых сцен или только корневых узлов.
Итак, существует ли какой-либо консенсус/конвенция/лучшая практика, или в конечном итоге все сводится к предпочтениям, при этом оба подхода не слишком функционально различаются?>
Подробнее здесь: https://stackoverflow.com/questions/786 ... scene-root
Мобильная версия