使用AWTEvent.WINDOW_EVENT_MASK捕获窗口事件

时间:2014-01-06 08:03:23

标签: java swing awt

为了捕获全局级别的窗口事件,我正在做

    Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
        @Override
        public void eventDispatched(AWTEvent event) {
            System.out.println(event);
            System.out.println(Arrays.toString(Window.getWindows()));
        }
    }, AWTEvent.WINDOW_EVENT_MASK);

但是,当打开内部框架窗口时,我没有收到任何事件。此外,Window.getWindows()未返回内部框架窗口。

  1. 如何在全局级别从InternalFrame窗口捕获事件(打开和关闭)?
  2. 当我尝试使用AWTEvent.WINDOW_STATE_EVENT_MASK缩小事件范围时,我没有收到任何事件。我对Window开幕式和闭幕式特别感兴趣。 如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

对于JInternalFrame打开和关闭,不会推送WindowEvent,因为它不是Window个孩子。使用AWTEvent.CONTAINER_EVENT_MASK中的AWTEventListener参数,您将收到ContainerEvent[COMPONENT_ADDED]ContainerEvent[COMPONENT_REMOVED],分别用于添加和删除JInternalFrames

Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
    @Override
    public void eventDispatched(AWTEvent event) {
        System.out.println(event);
    }
}, AWTEvent.CONTAINER_EVENT_MASK);