Я использую этот подход для изменения сцен в JavaFX
:
/**
* Controller class for menuFrame.fxml
*/
public class MenuFrameControl implements Initializable {
@FXML private Button sceneButton1;
@FXML private Button sceneButton2;
@FXML private Button sceneButton3;
/**
* Event handling method, loads new scene from .fxml file
* according to clicked button and initialize all components.
* @param event
* @throws IOException
*/
@FXML
private void handleMenuButtonAction (ActionEvent event) throws IOException {
Stage stage = null;
Parent myNewScene = null;
if (event.getSource() == sceneButton1){
stage = (Stage) sceneButton1.getScene().getWindow();
myNewScene = FXMLLoader.load(getClass().getResource("/mvc/view/scene1.fxml"));
} else if (event.getSource() == sceneButton2){
stage = (Stage) flightBtn.getScene().getWindow();
myNewScene = FXMLLoader.load(getClass().getResource("/mvc/view/scene2.fxml"));
} else if (event.getSource() == sceneButton3) {
stage=(Stage) staffBtn.getScene().getWindow();
myNewScene = FXMLLoader.load(getClass().getResource("/mvc/view/scene3.fxml"));
}
Scene scene = new Scene(myNewScene);
stage.setScene(scene);
stage.setTitle("My New Scene");
stage.show();
}
@Override
public void initialize(URL location, ResourceBundle resources) { }
Поэтому в основном при нажатии на кнопку, она сохраняет фактически отображается Stage
объект в stage
переменной. Затем он загружает новый объект Scene
из файла .fxml в переменную myNewScene
, а затем помещает этот новый загруженный объект Scene
в ваш сохраненный объект Stage
.
С помощью этого кода вы можете сделать основное меню с тремя кнопками, где каждая кнопка переключается на другую сцену, используя только один объект Stage
.
Пожалуйста, отправьте сообщение [MCVE]. – DavidS
Я попросил пример, демонстрирующий проблему, потому что я хочу знать, что вы пробовали до сих пор. Это вопрос, который я ожидаю, что вы сможете ответить самим через некоторые вводные уроки или немного поработать с вашей стороны. – DavidS