在Swing中检测焦点(框架+组件)

3
我有一个小的对话框窗口,里面包含一些按钮和文本框。我需要让这个窗口能够检测到用户是否点击了屏幕上除这个窗口及其组件以外的其他地方,这样我才能关闭这个窗口。您有什么好的建议吗?我已经尝试了很多小时的焦点解决方案,但都没有找到解决方法!
3个回答

5

尝试使用WindowStateListener

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

class MyFocusLostListener implements WindowStateListener {

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

4

需要使框架能够检测到用户在屏幕上聚焦于其他东西时。

使用WindowListener并侦听windowDeactivated事件。


1

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

编辑:看到答案建议使用Window / StateListener - 它们比我的更适合顶级窗口 :-) 监听keyboardFocusManager是处理层次结构中较深容器的好方法,例如在JTable的CellEditorRemover中实现(以决定是否应终止挂起的编辑)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接