2017-01-07 5 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

ダイアログを移動するからユーザーを防ぐためにしたい場合は、単にユーザーがアラート(同様に、Xボタンの周りに移動するために使用することができ、ウィンドウの境界線を除去する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(); 
} 



他のいくつかの変更:ユーザーがダイアログを閉じる別の方法を)持っている

  • より多くのアプリケーションを正常にシャットダウンするには

    Platform.exit(); 
    

    System.exit(1); 
    

    を交換してください。結局、1というステータスコードは、異常終了を示します。

  • 削除

    else 
    { 
        alert.close(); 
    } 
    

    Alertがとにかく閉じた後showAndWaitのみを返すので、これは

  • はせずに値を取得するために

    result.orElse(null) 
    

    を使用し...、決して必要ですエラーが発生した場合でも、Optionalが空であっても(100%でない場合はこの場合に起こりますが、このようにするのは害ではない)。

関連する問題