KeyBindingApi. Enter не знает - PullRequest
0 голосов
/ 15 мая 2018

Я пытался выполнить действие, когда нажимал 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, поэтому карта ввода знает нажатие клавиши при помощи String ENTER,но если я возьму это здесь, это не сработает.ESCAPE работает отлично, но ENTER не работает.Если я приведу это к символу и сделаю

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

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

1 Ответ

0 голосов
/ 15 мая 2018

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

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

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

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

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

...