2008-12-30 23 views
5

Was ist der richtige Weg zwischen F1 und das heißt CTRL + F1 jeweiligen SHIFT trennen - CTRL + F1 innerhalb eines KeyListener hinter das heißt einem JButton registriert?Java: Handhabung kombiniert Tastatureingabe

public void keyPressed(KeyEvent event) { 
    int key = event.getKeyCode(); 

    logger.debug("KeyBoard pressed char(" + event.getKeyChar() + ") code (" + key + ")"); 
} 

.. gibt mir immer 112 für F1, 113 für F2 und so weiter. Ich verstehe, dass ich es durch die Pflege der keyPressed() jeweils für keyReleased für CTRL/SHIFT/ALT/etc auf meinem eigenen umgehen kann, aber ich hoffe, dass es einen besseren Weg gibt.

Vielen vielen Dank !!!

+0

@ThomasAbraham Bitte hören Sie auf, sich auf eine einzelne Bearbeitungsaufgabe zu konzentrieren - es gibt viel mehr, was in dieser Frage getan werden könnte (Stichwort im Titel, danke am Ende, Schlüsselwörter könnten möglicherweise hervorgehoben werden) und jede Änderung sollte versucht werden fix * all * davon, nicht nur eine einzige Sache. =) –

Antwort

4

Die Lösung liegt in der übergeordneten von KeyEvent (Inputevent)

  1. Verwenden der isAltDown, isControlDown, isShiftDown Methoden oder
  2. Verwenden der getModifiers Methode
+0

Vielen Dank, das war genau das was ich gesucht habe! – MrG

0

Das Schlüssel-Down-Ereignis wird aufgerufen, wenn eine Taste nicht gedrückt ist. Es ist kein Multiple-Key-Down-Ereignis, und es gibt keine solche Sache, so dass es keinen Schlüsselcode für mehrere Schlüssel gibt, die nicht aktiv sind.

Sie müssen nur eine Variable verwenden, um die gedrückte Strg-Taste zu verfolgen. Das bedeutet, dass Sie auch ein Key-Up-Ereignis verwenden müssen, um zu verfolgen, wann die Kontrolltaste losgelassen wird.

In pusedo Code:

 
// CRTLKeyCode is whatever the code is for the ctrl key 
private boolean ctrlPressed = false; 

onKeyDown(KeyEvent event){ 
    int key = event.getKeyCode(); 
    if(key == CRTLKeyCode) 
     ctrlPressed = true; 
    else if(ctrlPressed && key == 112) 
     //Perform your action 
} 
onKeyUp(KeyEvent event){ 
    int key = event.getKeyCode(); 
    if(key == CRTLKeyCode) 
     ctrlPressed = false; 
} 
+0

Vielen Dank, aber ich denke, dass es viel einfacher ist, den Status bei Bedarf mit isXxxDown() zu erhalten, wie von Midhat/bcash vorgeschlagen, um den Status selbst zu verwalten. – MrG

1

KeyEvent s sind wahrscheinlich etwas niedriger Ebene, wenn sie mit einem Swing-Widget handelt. Stattdessen gehen Sie durch InputMap und ActionMap.