Как активировать окно в Java? - PullRequest
5 голосов
/ 23 октября 2010

Я хотел бы активировать свое приложение Swing программно.Я имею в виду, что я хотел бы написать код, который заставляет JFrame быть видимым и сфокусированным (заголовок окна должен быть выделен).Я пытался использовать requestFocus().Это работает, только если приложение имеет как минимум 2 окна A и B: A скрыто, B видно.Теперь, если я позвоню A.requestFocus(), он станет активным, как я хочу.Этого не происходит, если приложение имеет только одно окно или оба окна невидимы.

Я нашел 2 обходных пути.

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

Есть ли "правильное" решение?

Ответы [ 4 ]

5 голосов
/ 23 октября 2010
frame.setState(Frame.NORMAL); // restores minimized windows
frame.toFront(); // brings to front without needing to setAlwaysOnTop
frame.requestFocus();

для всего, что вы хотели бы знать в мельчайших подробностях, см. Эту страницу: http://www.developer.com/java/other/article.php/3502181/Window-Focus-and-State-in-Java.htm

1 голос
/ 10 марта 2017

Я был в одной лодке - ничего из вышеперечисленного не сработало.

"МОЁ" решение было следующим:

thisFrame.getWindowListeners()[0].windowActivated(
     new WindowEvent(
              thisFrame,
              WindowEvent.WINDOW_ACTIVATED
     )
);
schedulesTable.requestFocus();

thisFrame = the window to get activated

schedulesTable = my component in the window I wanted to get focus for
1 голос
/ 24 января 2011

Я считал, что этот пост должен вам помочь.

1 голос
/ 23 октября 2010

Это должно сделать это:

frame.setSelected(true);

, и вы, вероятно, захотите это внутри блока try / catch ...

Если это не работает в используемой ОСЕсть еще две возможности:

frame.setAlwaysOnTop(true);
frame.setAlwaysOnTop(false);

и

frame.setVisible(true);
frame.setVisible(true); // Yes you need this second one
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...