2016-05-02 24 views
1

私は2つのステージを持っています.1つはメインステージで、もう1つはポップアップスクリーンです。ポップアップ画面が表示されたら、左上(またはOSによっては右上)にある「x」を押して閉じることができます。ポップアップ画面を閉じるたびにメインステージを閉じる方法はありますか?ポップアップを閉じた後にプラットフォームを閉じる| JavaFX

+1

クローズフック( 'popup.setOnCloseRequest(...)')で 'Platform.exit()'を呼び出します。 – Ironcache

+0

'onCloseRequest'は本当に正しいイベントではありません。ユーザーがポップアップの閉じるボタンをクリックしたときに呼び出されます。それはその時点で拒否することができるので、ポップアップは本当に閉じることはできません。 'onHidden()'を使うべきです。 –

答えて

2

StageおよびPopupは、WindowからonHidden propertyを継承する。これは、ウィンドウが隠された直後(任意のメカニズムによって)呼び出されるハンドラです。あなたは、アプリケーションを終了するために、ハンドラでPlatform.exit()を呼び出すことができます。

popup.setOnHidden(event -> Platform.exit()); 

Platform.exit()は、一般的にSystem.exit(0)に好適であることに注意してください:あなたがいずれかをバイパスして、System.exit(...)Applicationstop()メソッドが呼び出されることを許可しません呼び出しますアプリケーションが実行しているリソースのクリーンアップ。

+0

一般に、 'Platform.exit()'と 'System.exit(...)'の間でどちらを使うのが良いですか?私はいくつかのStackoverflowの質問を読んで、[一部の人](http://stackoverflow.com/questions/14938279/javafx-application-still-running-after-close)が両方を使用していることがわかりました。そして、それらのうちのいくつかはそれを使うのに興味がないので、いつかはうまくいかないかもしれません。 –

+0

ありがとう、これは仕事をした! – Karatawi

1

イベント名はsetOnCloseRequestです。 Alertポップアップウィンドウを開いている場合。

Alert popup = new Alert(AlertType.INFORMATION); 

次に、あなたのソリューションは、次のとおりです。

エルス
alert.setOnCloseRequest(new EventHandler<DialogEvent>() 
{ 
    @Override 
    public void handle(DialogEvent t) 
    { 
     System.exit(0); 
    } 
}); 

あなたはそれの所有者と別のウィンドウを閉じたい場合は、ちょうどそれがstageだ使うとWindowEventDialogEventを交換してください。

+1

'onCloseRequest'はここで使用する正しいイベントではありません。ウィンドウを閉じるための「外部」要求がある場合にのみ呼び出されます。通常これはユーザーがネイティブウィンドウの閉じるボタンを押すことを意味します。要求を拒否することができます。この場合、ウィンドウが閉じなくても 'onCloseRequest'ハンドラが呼び出されます。 –

関連する問題