2014-11-22 4 views
0

Я хочу контролировать параметр с помощью клавиш со стрелками, когда я нажимаю параметр, увеличивается на единицу, и когда я нажимаю его, он должен уменьшаться, но то, что на самом деле происходит, когда я нажимаю клавиша со стрелкой вверх ключевое событие называется много раз, в зависимости от времени нажатия клавиши. Просто быстрый щелчок увеличивает значение в 10 раз. Моя цель состоит в том, чтобы сделать приращение значения только один раз за клик или, по крайней мере, замедлить скорость ключевого события. Заранее спасибо!Как контролировать скорость ключевого события

Вот мой код:

frame.addKeyListener(new KeyListener() { 
      public void keyPressed(KeyEvent e) { 
       int keyCode = e.getKeyCode(); 
       switch (keyCode) { 
       case KeyEvent.VK_UP: 
        currentParam++; 
        if(currentParam>=90) 
         currentParam = 45; 
        System.out.println(currentParam); 
       } 
      } 

ответ

1

Вам нужен какой-то флаг, указывающий, что событие было обработано. Это необходимо сбросить после отпускания ключа.

Общий метод либо использовать серию boolean флагов или Map заклиненных на каждый тип ключа или List, который содержит все активные в данный момент ключи.

Что вы выбрали, будет зависеть от остальной части вашей программы.

Вам действительно следует избегать использования KeyListener s, они являются неприятными и непостоянными. Лучшим решением является использование API привязки ключей, посмотрите на How to use key bindings

Смежные вопросы