java - 使用 AWTEvent.WINDOW_EVENT_MASK 捕获窗口事件

标签 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 缩小事件范围时,我没有收到任何事件。我对窗口打开和关闭事件特别感兴趣。 我怎样才能实现这一目标?

最佳答案

对于 JInternalFrame 打开和关闭,不会推送 WindowEvent,因为它不是 Window 子级。在 AWTEventListener 中使用 AWTEvent.CONTAINER_EVENT_MASK 参数,您将收到 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);

关于java - 使用 AWTEvent.WINDOW_EVENT_MASK 捕获窗口事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20945544/

相关文章:

java - 如何让 JPanel 的宽度和高度相等

java - 在 JTable 中反转选择

java - 将鼠标事件转发到 java 中的隐藏面板

java - 如何使用 JdbcTemplate 删除多行

java - 当我点击图像时如何使图像消失?

java - RandomAccessFile 的意外输出

java - 如何实现图像无限循环?

Java2D 旋转后图像质量丢失

java - java中的事件监听器

java - 使用 Java Stream API 对嵌套列表求和