В чем основное различие между методом 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.
Но какая разница? Или это просто так, как говорится, что сфокусированное окно - это тип активированного окна?
Заранее спасибо!




Из Как написать оконных слушателей, который также отражает цитату в вашем вопросе:
windowActivated(WindowEvent)andwindowDeactivated(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, оно станет одновременно сфокусированным окном и активным окном.