您好我的Java应用程序中只有一个JDialog框。如果失去焦点,我想让它隐藏起来。 我尝试过不同的方法,但是无法触发任何窗口焦点事件。这是我的代码:
public void windowGainedFocus(WindowEvent e) {
System.out.println("gained focus");
}
public void windowLostFocus(WindowEvent e) {
System.out.println("lost focus");
}
答案 0 :(得分:2)
回应焦点事件可能非常棘手。我的经验几乎是每当有人试图以焦点来做非标准的事情时,他们最终都会后悔。其中最重要的一点就是它不是那么便携 - 许多基于X-Windows的显示器使用焦点跟随鼠标,这可能导致焦点在您不期望的时候被转移出去,导致早期解雇你的对话。
那就是说,Sun的官方教程在这里:http://java.sun.com/docs/books/tutorial/uiswing/misc/focus.html。如果我没记错的话,你可以将一个PropertyChangeListener附加到KeyboardFocusManager,并且会触发焦点更改:http://java.sun.com/javase/6/docs/api/java/awt/KeyboardFocusManager.html#addPropertyChangeListener%28java.beans.PropertyChangeListener%29
答案 1 :(得分:2)
使用WindowListener并处理windowDeactivated事件。