KeyListener de dos teclas a la vez

Pepinillo
04 de Octubre del 2005
Estoy haciendo un juego en java en el que utilizo hilos y oyentes de teclado, mi problema es que necesito que el KeyListener me roconozca la pulsación A LA VEZ de dos o más teclas (Cursor derecho y cursor superior por ejemplo para que el muñeco se mueva en diagonal), ¿es esto posible?

gabriel
04 de Octubre del 2005
Hola:
Yo creo que sí es posible:
cuando controles que se ha pulsado las teclas no numéricas puedes preguntar de la forma:
if(key==(KeyEvent.VK_RIGHT&&KeyEvent.VK_UP))
{
//Ha tecleado dos a la vez:derecha y arriba
}

nuevo
04 de Octubre del 2005
en un examen tendrías un 0 xD esas constantes de KeyEvent son numeros enteros y no puedes aplicar el operador && a expresiones enteras, solo a booleanas xDD
Por otro lado, yo ando tambien buscando una solucion para eso. Me temo que tendré que mirar como siempre por internet algun ejemplo rebuscado y tardar 3 dias en aplicarlo al mio u.u

nuevo
04 de Octubre del 2005
Toma ya. Indagando en una depuración del ejemplo que estoy haciendo, dí con la clave. Este post pasará por las narices de muchas personas que buscaban solución jaja.
Veréis, el truco está en depurar un evento keyPressed y ver cuanto vale la expresion "((InputEvent)evt).getModifiersEx()" siendo evt la variable de tipo KeyEvent que recibe la funcion keyPressed. Yo por ejemplo necesitaba pulsar a la vez Ctrl+D, y lo logré de esta forma:

if (((InputEvent)evt).getModifiersEx()==CODE_MODIFIEREX_CONTROL && evt.getKeyCode()==java.awt.event.KeyEvent.VK_D)
//pulsacion detectada
else
//otra pulsacion

En mi caso, ((InputEvent)evt).getModifiersEx() vale 128 cuando pulso Ctrl, y VK_D siempre vale lo mismo porque es constante de la clase KeyEvent, como sabréis.

Simplemente es eso, depurad vuestro ejemplo, poned un punto de ruptura en keyPressed y mirad cuando vale "((InputEvent)evt).getModifiersEx()" para usar la combinacion de teclas ;)

(Con 2 es asi, con 3 no se me ocurre, pero a mi ya no me hace falta saber tanto xD)