Вопрос по java, javafx, fullscreen, fxml, layout – Полноэкранный режим не работает должным образом в JavaFX 2.1?

3

Первый этап, который я загружаю, всегда открывается как полноэкранный.

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));
  }
@UlukBiy хорошо загрузит user1236048
Ваш первый этап - начальный этап? Прикрепление скриншотов (2 для 2 разных ситуаций) может быть полезным. Uluk Biy
@UlukBiy загрузил скриншоты - не могли бы вы взглянуть ... в короткой версии он рассматривает prefWidth / prefHeight как полноэкранные размеры. Если нет правильного решения, знаете ли вы, как я могу узнать размеры экрана? user1236048

Ваш Ответ

2   ответа
0

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

Надеюсь, это поможет вам.

5

Я понятия не имею об истинной причине, но вот 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);
       }
    });
  }

Похожие вопросы