web-dev-qa-db-ja.com

Java EXIT_ON_CLOSEのアクションリスナーを追加するスイング

私はシンプルなGUIを持っています:

    public class MyGUI extends JFrame{

        public MyGUI(){
           run();
        }

        void run(){
           setSize(100, 100);
           setVisible(true);
           setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// maybe an action listener here
        }
    }

このメッセージを出力したい:

 System.out.println("Closed");

GUIが閉じられたとき(Xが押されたとき)。どうやってやるの?

24
Sam

これを試して。

    addWindowListener(new WindowAdapter()
        {
            @Override
            public void windowClosing(WindowEvent e)
            {
                System.out.println("Closed");
                e.getWindow().dispose();
            }
        });
54
prasanth

JFrameのコンストラクタ内でこのコードを記述します。

this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
this.addWindowListener(new Java.awt.event.WindowAdapter() {
    @Override
    public void windowClosing(Java.awt.event.WindowEvent e) {
        System.out.println("Uncomment following to open another window!");
        //MainPage m = new MainPage();
        //m.setVisible(true);
        e.getWindow().dispose();
        System.out.println("JFrame Closed!");
    }
});
1
ersks

別の可能性は、Windowクラスの dispose() をオーバーライドすることです。これにより、送信されるメッセージの数が減り、デフォルトのクローズ操作が_DISPOSE_ON_CLOSE_に設定されている場合にも機能します。

具体的には、これは追加を意味します

_@Override
public void dispose() {
    System.out.println("Closed");
    super.dispose();
}
_

クラスMyGUIに。

注:これは画面リソースを解放するため、super.dispose()を呼び出すことを忘れないでください!

0
Mr Tsjolder