【问题标题】:Hide JDialog window when the window lost focus当窗口失去焦点时隐藏 JDialog 窗口
【发布时间】:2011-03-07 18:04:23
【问题描述】:

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

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

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

【问题讨论】:

    标签: java events window jdialog


    【解决方案1】:

    使用 WindowListener 并处理 windowDeactivated 事件。

    【讨论】:

      【解决方案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

      【讨论】:

      • 我会详细说明我的问题。我用的是linux系统。我有一个带有 jEditPane 的 JDialog 框。这个窗口有固定的大小。当焦点丢失时,我想让这个窗口最小化到托盘。
      • 下面建议的 WindowListeners 似乎可行。我的直觉是,这最终会让很多用户感到有些恼火。您是否考虑过将其放入固定大小的 JWindow 中,然后让用户在不需要时将其最小化?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      相关资源
      最近更新 更多