1

嗨,我的 Java 应用程序中只有一个 JDialog 框。如果它失去焦点,我想让它不可见。我尝试了不同的方法,但无法触发任何窗口焦点事件。这是我的代码:

  public void windowGainedFocus(WindowEvent e) {
    System.out.println("gained focus");
  }

  public void windowLostFocus(WindowEvent e) {
    System.out.println("lost focus");
  }
4

2 回答 2

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

于 2010-06-24T10:48:23.087 回答
2

使用 WindowListener 并处理 windowDeactivated 事件。

于 2010-06-24T14:18:11.193 回答