Разница между windowActivated и windowFocusGained

В чем основное различие между методом windowActivated (реализованным из WindowListener) и windowGainedFocus (реализованным из WindowFocusListener)?

В документации Java говорится:

windowGainedFocus:

Invoked when the Window is set to be the focused Window, which means that the Window, or one of its subcomponents, will receive keyboard events.

windowActivated:

Invoked when the Window is set to be the active Window. Only a Frame or a Dialog can be the active Window. The native windowing system may denote the active Window or its children with special decorations, such as a highlighted title bar. The active Window is always either the focused Window, or the first Frame or Dialog that is an owner of the focused Window.

Но какая разница? Или это просто так, как говорится, что сфокусированное окно - это тип активированного окна?

Заранее спасибо!

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
735
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Из Как написать оконных слушателей, который также отражает цитату в вашем вопросе:

windowActivated(WindowEvent) and windowDeactivated(WindowEvent):

Called just after the listened-to window is activated or deactivated, respectively. These methods are not sent to windows that are not frames or dialogs. For this reason, the windowGainedFocus and windowLostFocus methods to determine when a window gains or loses the focus are preferred.


Таким образом, windowActivated - это Только, выполняемый, когда окно является фреймом или диалоговым окном, а windowGainedFocus - для всех типов.

Окно в фокусе - это то, что получает ввод с клавиатуры. Активным окном обычно является окно документа, которым управляет пользователь. Активное окно обычно выделяется визуально, например, с другой строкой заголовка.

В macOS сфокусированное окно называется ключевым окном, а активное окно (может быть только одно) - главным окном.

Разница неуловима, потому что это почти всегда одно и то же окно.

Примером их различий может служить плавающая палитра, содержащая текстовое поле. Палитра должна быть окном в фокусе, чтобы принимать ввод с клавиатуры, но окно документа является активным окном, в котором фактически вносятся изменения, и его следует отличать от других (неактивных) окон документов.

Хотя Java различает активные и сфокусированные окна в своем API, реализация связывает их вместе, так что некоторые комбинации (как в приведенном выше примере) невозможны или, по крайней мере, трудны для организации. Например, если вы щелкнете по фокусируемому окну Java, оно станет одновременно сфокусированным окном и активным окном.

Другие вопросы по теме