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

avatar
Casimir Rönnlöf
18 декабря 2018 в 18:27
740
2
1

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

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

windowGainedFocus:

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

windowActivated:

Вызывается, когда Окно установлено как активное Окно. Активным окном может быть только фрейм или диалог. Собственная оконная система может обозначать активное окно или его дочерние элементы специальными украшениями, такими как выделенная строка заголовка. Активным окном всегда является либо окно в фокусе, либо первый фрейм или диалоговое окно, являющееся владельцем окна в фокусе.

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

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

Источник

Ответы (2)

avatar
Mark
18 декабря 2018 в 18:36
2

From Как писать оконные слушатели, что также отражает цитату в вашем вопросе:

windowActivated(WindowEvent) и windowDeactivated(WindowEvent):

Вызывается сразу после активации или деактивации прослушиваемого окна, соответственно. Эти методы не отправляются в окна, которые не кадры или диалоги. По этой причине windowGainedFocus и windowLostFocus методы, чтобы определить, когда окно получает или теряет фокус являются предпочтительными.


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

avatar
Alan Snyder
7 июля 2019 в 04:37
0

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

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

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

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

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