35

JavaFX2.0でアプリケーションを作成しています。メインウィンドウから、いくつかの設定で新しいウィンドウを開始しています。設定の調整が終わったら、「変更を保存」のようなボタンを押したいと思います。

このボタンで変更を保存してウィンドウを閉じたいのですが。閉じるとは、背景に配置したり、可視性を設定したりするのではなく、殺すことを意味します。Stage.close()メソッドについて読みました

http://docs.oracle.com/javafx/2.0/api/javafx/stage/Stage.html

ご覧のとおり、これはHide()メソッドに似ています。このメソッドは、ウィンドウを閉じるのではなく、非表示にするだけです。

Q:誰かがメソッドを知っているか、ウィンドウを閉じるのに役立つコードを持っていますか?

すべての助けは大歓迎です。ありがとう!

4

3 に答える 3

53

リンクしたドキュメントには、次のように記載されていますstage.close()

このステージを閉じます。この呼び出しは、hide()と同等です。

hide()同等でステージclose()を閉じてから、ステージも閉じます。close()hide()

アプリケーションのすべてのステージが非表示になると(または、同じことであるため、必要に応じて閉じられると)、アプリケーションは終了します。紛らわしいですが、それはJavaFXチームがアクションに名前を付けて実装することを決定した方法です。

必要に応じて、Platform.setImplicitExit(boolean)メソッドを使用して、最後のウィンドウを閉じたり非表示にしたりしたときにアプリケーションを終了するデフォルトの動作をオフに切り替えることができます。

次に、ステージを完全に閉じずにステージを非表示にするにはどうすればよいかという問題が発生します。

hide()ウィンドウに関連するすべてのリソースを解放する場合のように、または同等の方法でステージが「完全に」閉じられるとは思いませんclose()(どこかでステージへの参照を保持している限り)。ステージが見えないようにするだけだと思います。おそらく電話をかけshow()た後に電話close()をかけることができ、ウィンドウが再び表示される可能性があります(私はそれを試しませんでした)。ただし、そうする場合は、hide()よりも呼び出す方が直感的ですclose()

私の推測では、アプリケーションでステージへの参照を保持しなくなり、ステージが閉じているか非表示になっている場合、JVMは、アルゴリズムがそれらのリソースをガベージコレクションすることを決定するたびに、ステージに関連するすべてのリソースを解放する可能性があります(ここでもこれをテストしないでください。そのように機能しない可能性があります)。

于 2012-04-18T20:06:59.790 に答える
24

これは私にとって完璧に機能しました(のインポートでNode):

((Node)(event.getSource())).getScene().getWindow().hide();
于 2014-02-21T15:38:14.183 に答える
3

ウィンドウを閉じるイベントをリッスンすることに関心のあるユーザーの場合は、ウィンドウにイベントフィルターを追加します(このイベントは、ユーザーがアプリケーションのOSの閉じるボタンを押したときにも発生します)

    yourWindow.addEventFilter(WindowEvent.WINDOW_CLOSE_REQUEST, event -> {
        // add your code here to handle the close event
        // use event.consume(); to prevent the application from closing
    });

カスタムの閉じるボタンを使用してアプリケーションを閉じる必要がある場合onActionは、ボタンの方法でイベントを発生させます。

 yourWindow.fireEvent(new WindowEvent(window, WindowEvent.WINDOW_CLOSE_REQUEST));
于 2018-09-08T12:33:00.190 に答える