Скрыть окно JDialog, когда окно потеряло фокус - PullRequest
1 голос
/ 24 июня 2010

Привет, у меня в приложении Java только один блок JDialog. Я хочу сделать его невидимым, если он потерял фокус.Я пробовал другой метод, но не смог вызвать ни одно из событий фокуса окна.Вот мой код:

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

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

Ответы [ 2 ]

2 голосов
/ 24 июня 2010

Используйте WindowListener и обрабатывайте событие windowDeactivation.

2 голосов
/ 24 июня 2010

Отвечать на события Фокуса может быть действительно сложно.По моему опыту, почти каждый раз, когда кто-то пытается сосредоточиться на нестандартных вещах, они в конце концов начинают сожалеть об этом.Не в последнюю очередь среди проблем является то, что это не так уж и портативно - во многих дисплеях на базе 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

...