2017-01-02 4 views
0

私は少し問題に遭遇しています。私はクライアント用のプログラムを作成しています。プログラムでは、私は専用の「クローズ/シャットダウン」ボタンを実装しています。これは、適切にシャットダウンするためにパスワードが必要です。しかし、プログラムを閉じる別の(そして安全性の低い)方法は、右上(Windows)または左上(Mac)の赤いクローズまたは 'X'ボタンを押すことです。赤い 'X'ボタンを使用してJavaFXプログラムをJava8で閉じるのを無効にしますか?

赤いxボタンが実際にプログラム全体を閉じることは望ましくありません。私が知りたいことは:赤い 'x'ボタンがプログラム全体を閉じるのを完全に無効にすることは可能ですか?可能であれば、誰かがこのコードを提供することができますか?

私が使用しているもの:IntelliJ IDEA(Ultimate)、JavaFX with Java 8、Dev。言語:Java

+0

「私は赤いXボタンは、実際に全体のプログラムを終了したくありません」。ここであなたが望むものを明確にすることはできますか?ウィンドウを閉じたままにしておきたいのですが、ウィンドウが閉じてもプログラムを実行したいのですか?それが意味するのであれば、単に 'Platform.setImplicitExit(false);'が必要です。 –

答えて

1

ステージのonCloseRequestイベントにイベントハンドラを追加します。これは、あなたがイベントを消費し、代わりに、独自のシャットダウン手順を実行することにより、閉じたウィンドウを防ぐことができます:

private void shutdown(Stage mainWindow) { 
    // you could also use your logout window/whatever here instead 
    Alert alert = new Alert(Alert.AlertType.NONE, "Really close the stage?", ButtonType.YES, ButtonType.NO); 
    if (alert.showAndWait().orElse(ButtonType.NO) == ButtonType.YES) { 
     // you may need to close other windows or replace this with Platform.exit(); 
     mainWindow.close(); 
    } 
} 

@Override 
public void start(Stage primaryStage) { 
    primaryStage.setOnCloseRequest(evt -> { 
     // prevent window from closing 
     evt.consume(); 

     // execute own shutdown procedure 
     shutdown(primaryStage); 
    }); 

    StackPane root = new StackPane(); 

    Scene scene = new Scene(root, 100, 100); 

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

もう一度、私は既に、setOnAction(ActionEvent e) - > {}ボタンによって発行された「コードをシャットダウンする」という入力を求める新しいウィンドウ(ステージ)につながる専用のシャットダウンボタンを持っています。従業員だけがこの情報を知っています。私が望むのは、顧客が誤って(または意図的に)赤いXを押すと、実装された「シャットダウン」と同じ場所にそれらが導かれるということです。ステージやシーンなどを複製したくないだけです。赤いxが押された場合、プログラムはこれを実行します。手動のシャットダウン手順を処理するsetOnAction(ActionEvent e) - >に行きます。 –

+0

@YuriKhechoyanそしてあなたはそのコメントを書くのですか?あなたが '警告 'を表示するか、ユーザーがプログラムをシャットダウンできるようにするために何か他の手順を開始するかどうかは、あなた次第です。あなたはまた、シーンに取って代わり、代わりにいくつかのログアウト画面を表示することができます。それはあなたがこれに対処する方法です... – fabian

+0

それは動作します!ありがとうございました!私はあなたが提供したコードのいくつかをちょっとしたやり直しをしなければなりませんでした!とても有難い! –

関連する問題