2010-06-16 16 views
6

Necesito determinar el estado actual de la tecla Mayús, pero en el momento que necesito el estado no tengo un objeto InputEvent alrededor. Necesito algo como java.awt.Toolkit.getLockingKeyState(int) que funcione para Shift, no solo las teclas de bloqueo como VK_CAPS_LOCK. ¿Hay alguna forma de que pueda hacer esto sin escuchar los eventos de entrada y almacenarlos para más tarde cuando necesito verificar el estado?Determinar el estado de la tecla modificadora sin un objeto InputEvent en Java

Gracias!

+1

Buena pregunta. La implementación con la que trabajo usa un InputEvent/KeyListener pero significa que tenemos un hack para determinar si el cambio está inactivo o no funciona si tiene otra aplicación enfocada, presione shift, luego muévase a la ventana de nuestra aplicación. –

Respuesta

1

No creo que sea posible obtener el estado de la tecla Shift si no tiene un Evento en la mano. Incluso java.awt.Toolkit.getLockingKeyState (int) usa código nativo para obtener su información. Estoy seguro de que podría diseñar su propio rastreador/tienda de eventos, etc., pero por las dudas, aquí hay un pequeño método que podría ser útil. Debe proporcionarle un componente AWT que tenga el foco.

public static boolean isShiftDown(Component c) throws AWTException { 
    final List<Boolean> res = new ArrayList<Boolean>(); 
    final KeyListener listener = new KeyAdapter() { 
     @Override public void keyReleased(KeyEvent e) { 
      res.add(e.isShiftDown()); 
     } 
    }; 
    c.addKeyListener(listener); 
    new Robot().keyRelease(KeyEvent.VK_ALT); 
    try {Thread.sleep(50);} catch (InterruptedException e) {} 
    c.removeKeyListener(listener); 
    if (res.size() > 0) 
     return res.get(0); 
    throw new AWTException("Could not get shift key status."); 
} 
Cuestiones relacionadas