簡體   English   中英

JFrame 捕獲處置事件

[英]JFrame catch dispose event

我有一個 Java 項目。
我有一個 JFrame 像這樣附加了一個處理程序

frame.addWindowListener(new WindowAdapter() {

            public void windowClosing(WindowEvent evt) {
                this.setEnabled(true);

            }
        });

但是,在該框架上我還有一個關閉按鈕(以使其更加用戶友好)並且該“關閉”按鈕調用框架處理方法。 現在,當我通過單擊右上角的小 x 按鈕關閉框架時,將調用 WindowListener。 但是當我調用 dispose 方法時事件不會觸發。
我應該調用其他方法來關閉,以便 WindowListener 觸發,還是實現另一個偵聽器?

您應該看看WindowListener 接口

windowClosing() :當用戶嘗試從窗口的系統菜單關閉窗口時調用。 (窗口X按鈕)

windowClosed() :當窗口因調用dispose在窗口上而關閉時調用。

所以, windowClosing()只有在用戶點擊窗口的X按鈕時才會被調用; windowClosed()dispose()事件被調用時被調用,所以它總是被調用:

  • 如果用戶使用 windows X按鈕關閉框架
  • 如果框架由代碼以編程方式關閉
    JFrame myFrame = new JFrame();
    myFrame.addWindowListener(new java.awt.event.WindowAdapter() {
        @Override
        public void windowClosed(java.awt.event.WindowEvent windowEvent) {
            // your code
        }
    });

來源: https : //alvinalexander.com/blog/post/jfc-swing/closure-your-java-swing-application-when-user-presses-close-but

在那個框架上,我還有一個關閉按鈕(使其更加用戶友好)

查看關閉應用程序解決方案來處理這個問題。 您真正需要做的就是將“ExitAction”添加到您的按鈕中,但您可以根據需要使用整個方法。

如果你想可靠地捕獲dispose ,無論它是如何調用的,你都可以重寫dispose方法。 通常你想調用super.dispose()並在它之前或之后實現任何自定義處理以適合給定任務。

        JFrame frame = new JFrame("FrameDemo") {
            @Override
            public void dispose() {
                System.out.println("On dispose");
                super.dispose();
            }
        };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM