Как сфокусировать JDialog программно?

Я читал некоторые из этих похожих тем здесь, но они не помогли мне. У меня есть мой JDialog, который не украшен и изначально не фокусируется:

super(connectionsTree.getMainFrame(), "", false);
        super.setUndecorated(true);
        super.setFocusableWindowState(false);
        super.setFocusable(false);
super.getContentPane().add(scrollPane);
        super.pack();

Теперь, когда этот диалог виден и пользователь нажимает кнопку "Пробел", я должен сфокусировать JDialog так, чтобы он получал ключевые события. Я делаю это так:

if (keyCode == 32) {
            tooltip().setFocusable(true);
            tooltip().setFocusableWindowState(true);
            tooltip().requestFocusInWindow();
        }

Этот код делает мой JDialog фокусируемым, но JDialog не фокусируется, и ключевые события не воспринимаются им.tooltip() Метод возвращает только экземпляр моего JDialog.

Как заставить мой JDialog получить фокус программно?

Спасибо!

1 ответ

Решение

Согласно документации requestFocusInWindow() сосредоточиться на Component будет предоставлен, только если родительский компонент верхнего уровня является владельцем фокуса. Так что это не будет работать, если ваше главное окно не фокусируется на нем. Вы должны использовать Component#requestFocus() вместо. От Component#requestFocus() описание

Просит, чтобы этот Компонент получил фокус ввода, и чтобы предок верхнего уровня этого Компонента стал сфокусированным Окном.

Другие вопросы по тегам