На мой взгляд, лучший способ сделать это - загрузить ваши экраны "по требованию" , когда они будут использоваться, или даже загрузить их только для определенных областей вашего основного экрана (например, вкладки). ). Чтобы загрузить экран с 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();
В первом случае вы просто загрузите основную сцену на вашей сцене. Использование нескольких этапов является наиболее распространенным и простым способом.