Вопрос по java, javafx, fullscreen, fxml, layout – Полноэкранный режим не работает должным образом в JavaFX 2.1?
Первый этап, который я загружаю, всегда открывается как полноэкранный.
stage.setFullScreen(true);
stage.setScene(login_scene);
Но когда я переключаюсь на другой FXML, приложения остаются полноэкранными (без верхней панели инструментов ..), но фактическое содержимое просмотра изменяется в prefWidth / prefHeight корневой AnchorPane из FXML (я вижу рабочий стол в нижнем правом углу: | ), и я хочу, чтобы он был динамичным для моего разрешения экрана.
Благодарю.
@ Позднее Редактировать:
Поэтому в методе запуска моего основного класса я загружаю сцену (созданную из документа FXML) и устанавливаю ее в рабочую область (параметр метода запуска). Я сохраняю этот этап для последующего использования.
Когда я нажимаю кнопку с той же сценой, которую я сохраняю ранее, я меняю сцену на другой документ FXML
@Screenshots:
http://tinypic.com/r/2079nqb/6 - 1-я сцена работает нормально - код из метода начального переопределения основного класса
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("Sample.fxml"));
stage.setScene(new Scene(root));
stage.setFullScreen(true);
stage.show();
currentStage = stage;
}
http://tinypic.com/r/szfmgz/6 - после перезагрузки второй сцены - код ниже из примера класса контроллера
@FXML
private void handleButtonAction(ActionEvent event) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("Sample.fxml"));
JavaFXApplication12.currentStage.setScene(new Scene(root));
}
Если я правильно знаю вашу проблему, тогда вы должны использовать свою основную стадию как статическую, или вы можете сделать ее доступной для другого контроллера, создавая геттеры и сеттеры. Таким образом, чтобы получить ту же сцену для загрузки других fxmls, вы можете установить его при загрузке fxml, а также убедиться, что не создаете другую сцену. Потому что из-за новой сцены вы изменили свой фактический контент. Так что вы можете использовать это
В Main.java:
YourController objYourController = loader.getController();
objYourController.setDialogStage(primaryStage);
В YourController.java:
public void setMystage(Stage primaryStage) {
this.primaryStage= primaryStage;
}
//To load another FXML
Parent root = FXMLLoader.load(getClass().getResource("Sample.fxml"));
primaryStage.getScene().setRoot(rootLayout);
Надеюсь, это поможет вам.
Я понятия не имею об истинной причине, но вот 2 быстрых обходных пути.
вhandleButtonAction
метод:
1) Не создавайте новую сцену, просто замените ее содержимое.
@FXML
private void handleButtonAction(ActionEvent event) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("Sample.fxml"));
JavaFXApplication12.currentStage.getScene().setRoot(root);
}
2) Если вам действительно нужно создать новую сцену, переключитесь в полноэкранный режим
@FXML
private void handleButtonAction(ActionEvent event) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("Sample.fxml"));
JavaFXApplication12.currentStage.setScene(new Scene(root));
Platform.runLater(new Runnable() {
@Override
public void run() {
JavaFXApplication12.currentStage.setFullScreen(false);
JavaFXApplication12.currentStage.setFullScreen(true);
}
});
}