Как узнать, какой объект в данный момент имеет фокус - PullRequest
25 голосов
/ 06 апреля 2009

У меня есть несколько TextField в моем Frame. Я хочу знать, какой TextField в настоящее время имеет фокус. Как я могу найти эту информацию?

Ответы [ 8 ]

31 голосов
/ 06 апреля 2009

JFrame.getFocusOwner() (наследуется от Window.getFocusOwner()) должно возвращать ссылку на компонент с фокусом. getMostRecentFocusOwner() также может представлять интерес.

27 голосов
/ 02 августа 2012
KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()
3 голосов
/ 06 апреля 2009

Также взгляните на javax.swing.FocusManager

2 голосов
/ 06 апреля 2009

getFocusOwner () вернет дочерний компонент, который в данный момент находится в фокусе.

Но вы должны проверить, является ли это JTextField. Другие компоненты, такие как кнопки, могут быть сфокусированы, если они существуют и в вашем кадре.

1 голос
/ 26 сентября 2018

Вы также можете прослушать соответствующее изменение свойства в диспетчере фокуса клавиатуры:

KeyboardFocusManager.getCurrentKeyboardFocusManager().addPropertyChangeListener("focusOwner", new PropertyChangeListener() {
    @Override
    public void propertyChange(PropertyChangeEvent evt) {
        System.out.println(evt.getNewValue());
    }
});

Выводит владельца фокуса при взаимодействии с компонентами Swing и полезен для отладки проблем фокуса в целом.

1 голос
/ 25 июля 2013

KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
не будет работать через потоки. Поэтому, если ваше приложение вызывает новый поток, и этот поток имеет свой собственный фрейм / окно и т. Д., То он не сможет получить владельца фокуса из этого потока. Вместо этого используйте: KeyboardFocusManager.getCurrentKeyboardFocusManager().getGlobalFocusOwner();

1 голос
/ 06 апреля 2009

У каждого JComponent есть метод hasFocus, который вы можете использовать, чтобы проверить, имеет ли он фокус. Однако это было изменено, и теперь вы должны использовать isFocusOwner.

Итак, запустите все текстовые поля в вашем фрейме и проверьте каждое из них, если это isFocusOwner, вызвав этот метод.

Вы также можете получить владельца фокуса через рамку.

1 голос
/ 06 апреля 2009

Этот учебник должен быть очень полезен для понимания фокуса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...