检测应用程序是否获得焦点(与窗口焦点相对)

时间:2016-12-13 13:12:23

标签: java swing

我有一个程序,应该在之前将焦点丢失到某个其他应用程序之后激活它时发出一些动作。我写了一个Focus-Listener来实现这个目标:

    frame.addWindowFocusListener(new WindowFocusListener() {
        @Override
        public void windowGainedFocus(WindowEvent e) {
          <do something when we gain focus>
        }

        @Override
        public void windowLostFocus(WindowEvent e) {
          <do something else when we lose focus>
        }
    });

问题是,当模式对话框(例如验证对话框)关闭时,也会调用gain-focus-action - 主窗口再次获得焦点。因此,如果我从我的程序内部或外部获得焦点,我将以某种方式需要检测。或者,换句话说,焦点操作不应位于主窗口上,而应位于应用程序本身上。什么是一个简单的方法呢?

2 个答案:

答案 0 :(得分:2)

感谢@Aelop帮我找到答案。对于其他应用程序的窗口,e.getOppositeWindow()为null,因此我可以巧妙地区分我来自的地方:

true

答案 1 :(得分:0)

如果你没有找到一个好的解决方案,当你的应用程序中的对话框丢失焦点时使用静态变量将静态布尔变量设置为true,这样当获得焦点并且变量为true时意味着焦点来自在应用程序中的一些窗口,其他焦点来自其他地方,我希望你能得到这个想法,如果你没有找到一些应用程序或检查丢失焦点的源类型