Переключение сцен JavaFX или изменение корня сценыJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Переключение сцен JavaFX или изменение корня сцены

Сообщение Anonymous »

Что касается вопроса о том, стоит ли, как и когда выбирать между переключением всей сцены или только корня сцены, я видел противоположные аргументы в пользу каждого подхода и несколько плюсов и минусов для каждого. Но на самом деле, похоже, не существует однозначного ответа или даже спецификации того, как следует идти или как предполагается использовать структуру.
Чтобы очень кратко продемонстрировать оба подхода. используя 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»