Полноэкранный режим не работает должным образом в JavaFX 2.1?

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

stage.setFullScreen(true);
stage.setScene(login_scene); 

Но когда я перехожу на другой FXML, приложения остаются в полноэкранном режиме (без верхней панели инструментов ..), но фактическое содержимое представления изменяется в размере prefWidth / prefHeight корневого AnchorPane из FXML (я вижу рабочий стол в правом нижнем углу: | ), и я хочу, чтобы он был динамичным для моего разрешения экрана.

Спасибо.

@ Позднее редактировать:

Итак, в методе запуска моего основного класса я загружаю сцену (созданную из документа FXML) и устанавливаю ее на этап (параметр метода запуска). Я сохраняю этот этап для дальнейшего использования.

Когда я нажимаю кнопку с тем же этапом, который я сохраняю ранее, я меняю сцену на другой документ FXML

@ Скриншоты:

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));
  }

person user1236048    schedule 30.06.2012    source источник
comment
Ваш первый этап - это начальный этап? Прикрепление скриншотов (2 для 2 разных ситуаций) может быть полезно.   -  person Uluk Biy    schedule 30.06.2012
comment
@UlukBiy загрузил скриншоты - не могли бы вы взглянуть ... в короткой версии он рассматривает prefWidth / prefHeight как полноэкранные размеры. Если нет нормального решения, знаете ли вы, как я могу узнать размеры экрана?   -  person user1236048    schedule 30.06.2012


Ответы (2)


Я понятия не имею о настоящей причине, но вот 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);
       }
    });
  }
person Uluk Biy    schedule 30.06.2012

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

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

person Rajeev Gupta    schedule 29.07.2013