Я разрабатываю настольное приложение с Swing / AWT, которое должно выходить на передний план и фокусироваться при поступающем оповещении.
Вызов toFront()
на фрейме верхнего уровня работает точно так же, как мне нужно в средах Windows, но на MacOS - нет.
В MacOS единственным успехом, с которым я столкнулся при выводе приложения на передний план, является
setState(JFrame.NORMAL);
setAlwaysOnTop(true);
setAlwaysOnTop(false);
но это приводит к очень необычному поведению. Сначала окно выйдет вперед, не получая фокусировки. Когда вы щелкаете по окну «теперь впереди», строка меню отображает заголовок и меню приложения, указывая, что оно имеет фокус, но само окно по-прежнему ведет себя во многих отношениях, как будто оно не имеет фокуса. В частности, стиль серого цвета по-прежнему не в фокусе (вместо синего по умолчанию), текстовые поля не могут быть сфокусированы, и программа не реагирует на ввод с клавиатуры. Тем не менее, кнопки и поля со списком могут по-прежнему использоваться нормально, хотя без визуального ответа «щелчка». Я пробовал разные комбинации
toFront();
setVisible(true);
requestFocus();
но ни один из них не имеет никакого влияния; единственный способ, которым я нашел, чтобы полностью сосредоточиться на приложении, состоит в том, чтобы щелкнуть мышью и переместить фокус в другое окно, а затем снова щелкнуть мое приложение. Я бы хотел, чтобы мои пользователи могли использовать приложение сразу после получения предупреждения, но, похоже, не могут заставить его работать правильно.