У меня есть простой графический интерфейс с JTextField и AWT Canvas (чтобы избежать встречного вопроса о том, почему я использую AWT Canvas: мне нужно иметь дескриптор окна).
Canvasдля обработки входных событий, это означает, что он должен быть фокусируемым.Я заверяю это, используя setFocusable(true)
в своем конструкторе, более поздние проверки с использованием isFocusable()
подтверждают, что он действительно фокусируемый.
Теперь JTextField получает фокус по умолчанию при открытии GUI.Пока это нормально для меня.Однако нет никакого способа получить фокус от от этого JTextField.
В статье "Подсистема фокусировки AWT" четко говорится, что если фокусируемый компонент находится в процессенажал на, он получит фокус.Этого не происходит, фактически я получаю события с нулевым изменением фокуса, только если окно снова деактивируется и активируется, но затем фокус возвращается обратно к JTextField.
Явные вызовы requestFocus()
иrequestFocusInWindow()
тоже не помогают, последний всегда возвращает false
.
Я получил те же результаты с любым фокусируемым компонентом, если я заменил JTextField.Если Canvas - единственный фокусируемый контейнер, все работает нормально, потому что он всегда будет в фокусе.
Я что-то здесь упускаю?Можно ли как-нибудь сделать фокусировку моего Canvas в присутствии другого фокусируемого компонента, желательно, чтобы этот фокус не фокусировался?