在摇摆中检测焦点(帧+组件)

时间:2011-04-19 14:11:02

标签: java swing focus

我出现了一个小对话框,在这个框架内有一系列按钮和一个文本框。 我需要框架能够检测到用户何时将焦点放在屏幕上的其他内容上(除了框架及其组件之外的任何东西),因此我可以关闭框架。 关于如何解决这个问题的任何建议?我一直在尝试聚焦解决方案几个小时,没有解决方案!

3 个答案:

答案 0 :(得分:5)

尝试使用WindowStateListener

它提供的WindowEvent参数可以告诉您窗口是否通过getNewState()方法失去焦点。

class MyFocusLostListener implements WindowStateListener {

    public void windowStateChanged(WindowEvent e) {
        if (e.getNewState() == WindowEvent.WINDOW_LOST_FOCUS) {
            e.getWindow().setVisible(false);
        }
    }
}

答案 1 :(得分:4)

  

需要框架能够检测到用户何时将焦点放在屏幕上的其他内容

使用WindowListener并侦听windowDeactivated。

答案 2 :(得分:1)

监听KeyboardFocusManager属性“permanentFocusOwner”的属性更改。在收到通知时,检查新的focusOwner是否在框架下的子层次结构中,如果不是 - 关闭框架。

编辑:看到建议Window / StateListener的答案 - 它们比我的顶级窗口更好:-)听取keyboardFocusManager对于层次结构中更深层次的容器是一种很好的方法,实现了f.i.在JTable的CellEditorRemover中(以决定是否应该终止挂起的编辑)