Как остановить повторенный keyPressed () / keyReleased () события в Swing

Вводный бросок выдает исключение, если попытка броска перестала работать. "Поскольку" состав исполнителей возвращает пустой указатель, если попытка броска перестала работать.

13
задан Sandro 15 November 2009 в 06:53
поделиться

3 ответа

Итак, проблема, с которой я столкнулся кажется ошибкой, которая возникает только в Linux

Да, это проблема Linux.

В Windows, когда клавиша удерживается, вы получаете несколько событий KeyPressed, но только одно событие KeyReleased.

Этот вопрос задают часто, и я никогда не видел хорошее решение.

Но я думаю, что в основе решения лежит использование таймера. При нажатии клавиши запускается таймер. Когда вы нажмете еще одну клавишу, вы перезапустите таймер. Таким образом, пока интервал таймера больше, чем частота повторения клавиатуры, таймер будет постоянно сбрасываться при удерживании клавиши. Когда keyPresses перестанут генерироваться, таймер сработает, поэтому вы предполагаете, что клавиша была отпущена. Это означает, что у вас будет задержка в обработке keyReleased.

14
ответ дан 1 December 2019 в 23:31
поделиться

Вот баг от Солнца (включает в себя примеры обходных путей): http://bugs.sun.com/view_bug.do?bug_id=4153069

1
ответ дан 1 December 2019 в 23:31
поделиться

Этот вопрос дублируется здесь .

Вот хак , реализованный как AWTEventListener, который можно установить при запуске приложения.

2
ответ дан 1 December 2019 в 23:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: