KeyListener do Swing e várias teclas pressionadas ao mesmo tempo

Existe alguma maneira convencional de rastrear os events, quando duas teclas do teclado são pressionadas ao mesmo tempo? Eu tenho algumas idéias, por exemplo, lembrando a chave e o tempo de geração de events para que possamos, em uma chamada de manipulador de events consecutivos, verificar a diferença de tempo entre esses dois events e decidir se é um evento de dois botões ou não. Mas parece um kludge.

Use uma coleção para lembrar quais teclas estão atualmente pressionadas e verifique se mais de uma tecla é pressionada sempre que uma tecla é pressionada.

class MultiKeyPressListener implements KeyListener { // Set of currently pressed keys private final Set pressed = new HashSet(); @Override public synchronized void keyPressed(KeyEvent e) { pressed.add(e.getKeyChar()); if (pressed.size() > 1) { // More than one key is currently pressed. // Iterate over pressed to get the keys. } } @Override public synchronized void keyReleased(KeyEvent e) { pressed.remove(e.getKeyChar()); } @Override public void keyTyped(KeyEvent e) {/* Not used */ } } 

A interface KeyListener permite detectar teclas pressionando e liberando separadamente. Portanto, você pode manter um conjunto de “chaves ativas”, ou seja, chaves que foram pressionadas, mas ainda não foram liberadas.