У нас есть приложение, которое в качестве первого действия пользовательского интерфейса отображает модальный JDialog без родительского фрейма.
public LoginDialog(Frame owner, Config config, Object... params) {
super((Frame)null, true);
У него, к сожалению, есть досадная особенность: когда он появляется, хотя и выходит вперед, он не захватывает фокус.
Таким образом, пользователь, после запуска приложения, дважды щелкнув по меню «Пуск», должен использовать мышь, чтобы выбрать диалоговое окно «Логин» и ввести информацию.
Есть ли способ заставить этот JDialog захватывать фокус, когда он появляется спереди?
Я пробовал вызывать «requestFocus» до, после и через invokeLater «во время» вызова setVisible (true) - но, похоже, ни один из них не имеет никакого эффекта.
Как сделать так, чтобы модальное диалоговое окно захватывало фокус?
ОБНОВЛЕНИЕ: проблема заключалась в коде, используемом для того, чтобы попытаться представить фоновое «окно ожидания». Это окно отображалось «позади» диалогового окна входа в систему как хак, чтобы после исчезновения диалогового окна пользователь мог видеть сообщение «Пожалуйста, подождите». Поскольку это было первое окно, созданное приложением, оно получило фокус. Я не уверен, что был бы способ заставить диалог снова получить фокус в потоке диспетчеризации событий с помощью этого хака - но я исправил его, сняв его и сделав все правильно.