Я хотел бы активировать свое приложение Swing программно.Я имею в виду, что я хотел бы написать код, который заставляет JFrame
быть видимым и сфокусированным (заголовок окна должен быть выделен).Я пытался использовать requestFocus()
.Это работает, только если приложение имеет как минимум 2 окна A и B: A скрыто, B видно.Теперь, если я позвоню A.requestFocus()
, он станет активным, как я хочу.Этого не происходит, если приложение имеет только одно окно или оба окна невидимы.
Я нашел 2 обходных пути.
- использовать поддельную прозрачную недекорированную рамку, которая всегда сверху.Это поддельное окно будет играть роль окна B. Я не пытался его реализовать, но похоже, что оно должно работать.
- call
A.setAlwaysOnTop(true)
.Это приносит окно А поверх других окон.Но это еще не в фокусе.Используйте java.awt.Robot
(mouseMove, mousePress, mouseRelease), чтобы щелкнуть заголовок окна A. Теперь вызовите A.setAlwaysOnTop(false)
и верните указатель мыши обратно в предыдущую позицию.Я реализовал код, и он работает, но выглядит как уродливый обходной путь.
Есть ли "правильное" решение?