Q 关于 Java WindowListener [英] Q about Java WindowListener

查看:27
本文介绍了Q 关于 Java WindowListener的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果你有一个 WindowListenerwindowDeactivated(WindowEvent) 事件是否总是在窗口关闭时发生,或者 windowClosing(WindowEvent) 是否有可能发生?) 在没有 windowDeactivated(WindowEvent) 发生的情况下发生.也就是说,窗口停用是窗口关闭的一部分吗?

If you have a WindowListener, will a windowDeactivated(WindowEvent) event always occur whenever a window is closed, or is it possible for a windowClosing(WindowEvent) to occur without a windowDeactivated(WindowEvent) occurring. That is, is window deactivation a part of window closing?

最后,windowClosed(WindowEvent) 是否总是(通常)跟在 windowClosing(WindowEvent) 之后?

Finally, will a windowClosed(WindowEvent) always (normally) follow a windowClosing(WindowEvent)?

推荐答案

假设 JFrame,结果似乎取决于setDefaultCloseOperation();获取 WINDOW_CLOSED 事件需要在窗口上调用 dispose",例如通过 DISPOSE_ON_CLOSE,如前所述 此处.

Assuming JFrame, the result seems to depend on the setDefaultCloseOperation(); getting a WINDOW_CLOSED event requires "calling dispose on the window", e.g. via DISPOSE_ON_CLOSE, as mentioned here.

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();
            }
        });
    }
}

这篇关于Q 关于 Java WindowListener的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆