首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >问:关于Java WindowListener

问:关于Java WindowListener
EN

Stack Overflow用户
提问于 2010-01-27 01:40:15
回答 1查看 2.7K关注 0票数 2

如果您有一个WindowListener,那么每当窗口关闭时,是否总是会发生windowDeactivated(WindowEvent)事件,或者是否可以在没有windowDeactivated(WindowEvent)的情况下发生windowClosing(WindowEvent)。也就是说,窗口停用是关闭窗口的一部分吗?

最后,windowClosed(WindowEvent)总是(通常)跟在windowClosing(WindowEvent)后面吗

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-01-27 09:27:00

假设为JFrame,结果似乎依赖于setDefaultCloseOperation();获取WINDOW_CLOSED事件需要“在窗口上调用dispose”,例如通过DISPOSE_ON_CLOSE,正如前面提到的here

代码语言:javascript
复制
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;

/** @see http://stackoverflow.com/questions/2141325 */
public class MyPanel extends JPanel {

    private static final Random RND = new Random();
    private static final WindowAdapter listener = new WindowAdapter() {

        @Override
        public void windowClosed(WindowEvent e) {
            print(e);
        }

        @Override
        public void windowClosing(WindowEvent e) {
            print(e);
        }

        @Override
        public void windowDeactivated(WindowEvent e) {
            print(e);
        }

        private void print(WindowEvent e) {
            System.out.println(e.getWindow().getName() + ":" + e);
        }
    };

    public MyPanel() {
        this.setBackground(new Color(RND.nextInt()));
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(320, 240);
    }

    private static void create() {
        for (int i = 0; i < 2; i++) {
            JFrame f = new JFrame();
            f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            f.setTitle(String.valueOf(i));
            f.add(new MyPanel());
            f.addWindowListener(listener);
            f.pack();
            f.setLocationRelativeTo(null);
            f.setVisible(true);
        }
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                create();
            }
        });
    }
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2141325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档