KeyBindingApi. Enter не знает

Я пытался выполнить действие, нажимая Enter на кнопке.

        System.out.println(KeyStroke.getKeyStroke("ENTER").getKeyCode());
        im.put(KeyStroke.getKeyStroke("ESCAPE"),"esc");
        im.put(KeyStroke.getKeyStroke("released ESCAPE"),"esc released");

        im.put(KeyStroke.getKeyStroke("ENTER"),"enter");
        im.put(KeyStroke.getKeyStroke("released ENTER"),"enter released");

Не знаю почему, но sysout получил 10, поэтому карта ввода знает нажатие клавиши со строкой ENTER, но если я возьму ее здесь, она не работает. ESCAPE работает отлично, но ENTER не работает. Если я брошу это на char и сделаю

        im.put(KeyStroke.getKeyStroke((char) KeyEvent.VK_ENTER),"enter");
        im.put(KeyStroke.getKeyStroke("released ENTER"),"enter released");

Тогда это работает. Но я думаю, что это некрасиво, и я не хочу использовать это, потому что обычно "Enter" должен работать, я думаю.

Пожалуйста, прочтите минимальный воспроизводимый пример

Max Vollmer 14.05.2018 23:57
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
42
1

Ответы 1

Проблема в том, и это хорошо документировано, KeyListener ненадежен.

Чтобы KeyListener работал, компонент, для которого он зарегистрирован, ДОЛЖЕН быть фокусируемым И иметь фокус клавиатуры.

Добавление компонентов, таких как JButton, перемещает фокус клавиатуры от вашего компонента и вместо этого передает его другим компонентам, поэтому KeyListener перестает работать.

Существует множество «обходных путей», но, честно говоря, они ненадежны и по сути являются всего лишь взломами.

Вам лучше использовать Key Bindings API, который устраняет недостатки KeyListener и предоставляет гораздо более универсальный и гибкий API.

mhhh Я попробовал. Мой ответ ниже

Felix Lenz 15.05.2018 17:52

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