2013-07-26 4 views
1

Я использую этот код для привязки клавиш клавиатуры на пользовательские действия без использования KeyListener:Привязки клавиша с несколькими ключами

Action left = new AbstractAction() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     System.out.println("pressed left key"); 
    } 
}; 

Action right = new AbstractAction() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     System.out.println("pressed right key"); 
    } 
}; 

Action space = new AbstractAction() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     System.out.println("pressed space key"); 
    } 
}; 

myJPanel.getInputMap().put(KeyStroke.getKeyStroke("LEFT"), "pressedLeft"); 
myJPanel.getInputMap().put(KeyStroke.getKeyStroke("A"), "pressedLeft"); 
myJPanel.getActionMap().put("pressedLeft", left); 

myJPanel.getInputMap().put(KeyStroke.getKeyStroke("RIGHT"), "pressedRight"); 
myJPanel.getInputMap().put(KeyStroke.getKeyStroke("D"), "pressedRight"); 
myJPanel.getActionMap().put("pressedRight", right); 

myJPanel.getInputMap().put(KeyStroke.getKeyStroke("SPACE"), "pressedSpace"); 
myJPanel.getActionMap().put("pressedSpace", space); 

Все работает отлично, но я заметил, что, когда я нажимаю т.е. ПРОСТРАНСТВА, удерживая A, действие left больше не срабатывает, было бы здорово, если были запущены события для обеих нажатых клавиш.

Есть ли способ использовать привязки клавиш с комбинациями клавиш?

ответ

2

См. Motion Using the KeyBoard для получения потенциального решения.

Событие генерируется только для последней нажатой клавиши, поэтому вам необходимо вручную отслеживать любые другие нажатые клавиши (и вручную имитировать запуск события). Это верно, если вы используете привязки клавиш или KeyListener.

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