2017-01-07 3 views
1

У меня проблема с интерфейсом «Вы хотите выйти».Отключить движение предупреждения javafx

С сегодняшнего дня я могу переместить окно предупреждения, в котором я хочу, что я хотел бы изменить - желательно зафиксировать предупреждение в заданном положении (в середине экрана).

Проблема с этим оповещением, способным передвигаться, заключается в том, что при настройках с более чем одним экраном вы можете перемещать его по своему усмотрению (вне игрового интерфейса f.e.).

Button btExit = new Button("Exit Game"); 
    btExit.setMinWidth(100); 
    buttonGrid.add(btExit, 0, 5); 
    btExit.setOnAction(new EventHandler<ActionEvent>() 
    { 
     @Override 
     public void handle(ActionEvent event) 
     { 
      Alert alert = new Alert(AlertType.CONFIRMATION); 
      alert.setTitle(""); 
      alert.initModality(Modality.APPLICATION_MODAL); 
      alert.initOwner(primaryStage); 
      alert.setHeaderText("Quit Game"); 
      alert.setContentText("Are you sure?"); 

      Optional<ButtonType> result = alert.showAndWait(); 
      if (result.get() == ButtonType.OK){ 
       System.exit(1); 
      }else 
      { 
       alert.close(); 
      } 

     } 
    }); 
+0

Что изменилось, что теперь диалоговое окно «Предупреждение» можно перемещать, если оно не может быть раньше? – hotzst

+0

И вы хотите, чтобы ваше поле оповещения оставалось в пределах вашего начального окна? –

+0

Диалоговое окно оповещения также можно было перемещать, и проблема заключается в том, что я хочу, чтобы он оставался там, где он становится видимым, и он тоже не должен перемещаться пользователем. –

ответ

3

Если вы хотите запретить пользователю перемещение диалогового окна, просто задать стиль для UNDECORATED который удаляет границу окна пользователь может использовать для перемещения по чеку (а также кнопки х, но пользователь имеет альтернативный способ закрытия диалогового окна):

@Override 
public void start(Stage primaryStage) { 
    Button btn = new Button("Show alert"); 
    btn.setOnAction((ActionEvent event) -> { 
     Alert alert = new Alert(AlertType.CONFIRMATION); 
     alert.getDialogPane().setStyle("-fx-border-color: black;"); 
     alert.initModality(Modality.APPLICATION_MODAL); 

     alert.initStyle(StageStyle.UNDECORATED); 

     alert.initOwner(primaryStage); 
     alert.setHeaderText("Quit Game"); 
     alert.setContentText("Are you sure?"); 

     Optional<ButtonType> result = alert.showAndWait(); 
     if (result.orElse(null) == ButtonType.OK) { 
      Platform.exit(); 
     } 
    }); 

    StackPane root = new StackPane(); 
    root.getChildren().add(btn); 

    Scene scene = new Scene(root, 600, 400); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 



Некоторые другие изменения, которые я сделал здесь:

  • Заменить

    System.exit(1); 
    

    с

    Platform.exit(); 
    

    Чтобы закрыть приложение более изящно. В конце концов код состояния 1 указывает аномальное завершение.

  • Удалить

    else 
    { 
        alert.close(); 
    } 
    

    это никогда не надо, так как showAndWait возвращается только после того, как Alert закрыт в любом случае ...

  • Используется

    result.orElse(null) 
    

    для извлечения значения без ошибка, даже если Optional пуст (не 100% уверен, что это может произойти в этом случае, но оно не больно делать это так).

 Смежные вопросы

  • Нет связанных вопросов^_^