我出现了一个小对话框,在这个框架内有一系列按钮和一个文本框。 我需要框架能够检测到用户何时将焦点放在屏幕上的其他内容上(除了框架及其组件之外的任何东西),因此我可以关闭框架。 关于如何解决这个问题的任何建议?我一直在尝试聚焦解决方案几个小时,没有解决方案!
答案 0 :(得分:5)
它提供的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中(以决定是否应该终止挂起的编辑)