web-dev-qa-db-ja.com

setDefaultCloseOperationのカスタムオペレーションを作成しますか?

Java「閉じる」十字ボタンが押されたときに独自のカスタム関数を呼び出すアプリケーションを作成したいのですが、setDefaultCloseOperationオーバーロードはまったくありません。

これをどのように達成できるか考えていますか?

19
prometheuspk

上記の提案はすべて、WindowListenerを使用する必要があるという点で正しいものです。

しかし、あなたが追加したいかもしれないことを彼らが言及するのを忘れているという点で、すべての答えも不完全です:

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(...);

これにより、(通常はフレームでdispose()メソッドを使用して)指示がない限り、ウィンドウは自動的に閉じないため、コードでウィンドウを閉じるプロセスを完全に制御できます。これにより、ウィンドウを閉じるかどうかの確認をユーザーに要求できます。

アプリケーションを閉じる には、ウィンドウが閉じられたときに実行される単純なアクションを作成できる単純なAPIがあります。クローズ操作とウィンドウリスナーコードを管理します。

29
camickr

多分これですが、その前にチュートリアルを読んでください WindowListener ハワードが投稿した、いくつか/別のオプションがあります

WindowListener exitListener = new WindowAdapter() {

    @Override
    public void windowClosing(WindowEvent e) {
        int confirm = JOptionPane.showOptionDialog(
             null, "Are You Sure to Close Application?", 
             "Exit Confirmation", JOptionPane.YES_NO_OPTION, 
             JOptionPane.QUESTION_MESSAGE, null, null, null);
        if (confirm == 0) {
           System.exit(0);
        }
    }
};
frame.addWindowListener(exitListener);
36
mKorbel

フレームに ウィンドウリスナー を追加できます。

frame.addWindowListener(new WindowAdapter() {
   public void windowClosing(WindowEvent evt) {
     onExit();
   }
  });

...
public void onExit() {
  System.err.println("Exit");
  System.exit(0);
}
8
khachik

フレームにWindowListenerを追加できます(例 ここ を参照)。

4
Howard