переключить / выйти из fxml - PullRequest
2 голосов
/ 12 марта 2012

Поток моего тестового приложения использует несколько экранов:

start(Stage stage) -> Screen 1
                   -> Screen 2
                   -> ...

Я хочу реализовать некоторые из своих экранов в формате fxml, но не могу понять, как лучше переключаться между ними.

Как я могу реализовать какой-либо механизм события отказа в контроллере экрана 1, когда экран 1 достиг своего конечного состояния, и подключить его к «основному циклу», чтобы удалить экран 1 и обновить сцену с экраном 2?

1 Ответ

1 голос
/ 04 июля 2012

На мой взгляд, лучший способ сделать это - загрузить ваши экраны "по требованию" , когда они будут использоваться, или даже загрузить их только для определенных областей вашего основного экрана (например, вкладки). ). Чтобы загрузить экран с FXML и затем назначить его основной сцене, вы должны сделать что-то вроде:

Parent root = FXMLLoader.load(me.getClass().getResource("Scene2.fxml"));
Scene scene = new Scene( root );
stage.setScene(scene);

Другая альтернатива - использовать несколько этапов, запускать этапы, когда вам нужно выполнить определенное действие. Эта стадия может быть модальной, поэтому, когда она закрыта, главное окно остается позади:

final  Stage stage = new Stage();     
stage.initStyle(StageStyle.UNDECORATED);
stage.initOwner(owner_stage);
stage.initModality(Modality.APPLICATION_MODAL);

В этом более позднем случае «механизм выхода» просто скрывает сцену:

// from a label of your controller class
label.getScene().getWindow().hide();  

В первом случае вы просто загрузите основную сцену на вашей сцене. Использование нескольких этапов является наиболее распространенным и простым способом.

...