Приложение Swing не получит фокус при вызове на фронт в MacOS - PullRequest
0 голосов
/ 16 апреля 2019

Я разрабатываю настольное приложение с Swing / AWT, которое должно выходить на передний план и фокусироваться при поступающем оповещении.

Вызов toFront() на фрейме верхнего уровня работает точно так же, как мне нужно в средах Windows, но на MacOS - нет.

В MacOS единственным успехом, с которым я столкнулся при выводе приложения на передний план, является

setState(JFrame.NORMAL);
setAlwaysOnTop(true);
setAlwaysOnTop(false);

но это приводит к очень необычному поведению. Сначала окно выйдет вперед, не получая фокусировки. Когда вы щелкаете по окну «теперь впереди», строка меню отображает заголовок и меню приложения, указывая, что оно имеет фокус, но само окно по-прежнему ведет себя во многих отношениях, как будто оно не имеет фокуса. В частности, стиль серого цвета по-прежнему не в фокусе (вместо синего по умолчанию), текстовые поля не могут быть сфокусированы, и программа не реагирует на ввод с клавиатуры. Тем не менее, кнопки и поля со списком могут по-прежнему использоваться нормально, хотя без визуального ответа «щелчка». Я пробовал разные комбинации

toFront();
setVisible(true);
requestFocus();

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...