valor usar una teclado tecla saber presionada eventos evento esta esperar como java swing keylistener

usar - ¿Cómo puedo escuchar las pulsaciones de teclas(dentro de Java Swing) en todos los componentes?



usar enter en java (3)

Me gustaría escuchar combinaciones de teclas como Control + S sin agregar oyentes clave a cada componente en mi aplicación Swing. ¿Cómo puedo conseguir esto?


Es posible.

KeyboardFocusManager.getCurrentKeyboardFocusManager() .addKeyEventDispatcher(new KeyEventDispatcher() { @Override public boolean dispatchKeyEvent(KeyEvent e) { System.out.println("Got key event!"); return false; } });

Eso atrapará todos los eventos clave. Si se devuelve falso, el administrador de foco del teclado reanudará el envío normal de eventos clave a los diversos componentes.

Si desea capturar combinaciones de teclas, puede mantener un conjunto de "teclas presionadas". Cada vez que se presiona una tecla, agréguela al conjunto y verifique qué teclas ya están en el conjunto. Cuando se suelta una tecla, retírela del conjunto.


Muy simple amigo mío: todo lo que tienes que hacer es crear una clase KeyEventDispatcher y registrarte en KeyboardFocusManager C.1

A continuación, analice y extraiga el estado y la información clave, vea: C.2. Aunque parezca extraño, debe obtener el ESTADO CLAVE a través de ThatEvent.getID ();

PARECE COMO UN MISSNOMER PARA MÍ.

/////////////////////////////////////////////////////////////////////////////////////////// C.1) KeyDispatcher ThisKeyDispatcher = new KeyDispatcher(); KeyboardFocusManager ThisKbFocusMngr = KeyboardFocusManager . getCurrentKeyboardFocusManager(); ThisKbFocusMngr . addKeyEventDispatcher(ThisKeyDispatcher); return ThisKeyDispatcher; /////////////////////////////////////////////////////////////////////////////////////////// C.2 public static class KeyDispatcher implements KeyEventDispatcher { public boolean dispatchKeyEvent(final KeyEvent ThatEvent) { KeyboardFocusManager ThisKbFocusMngr = null; Component ThisComponent = null; Container ThisRoot = null; Window ThisWindow = null; int ThisKeyStateEvent = 0; try { ThisKbFocusMngr = KeyboardFocusManager . getCurrentKeyboardFocusManager(); ThisComponent = ThisKbFocusMngr . getFocusOwner(); ThisRoot = ThisKbFocusMngr . getCurrentFocusCycleRoot(); ThisWindow = ThisKbFocusMngr . getActiveWindow(); ThisKeyStateEvent = ThatEvent.getID(); // i.e. KeyEvent.KEY_RELEASED if(false == ThatEvent.isConsumed()) { boolean RetBool = false; if((KeyEvent.VK_BACK == ThatEvent.getKeyCode())) { RetBool = true; } else { RetBool = m_CallSomeoneEvent(ThatEvent); } if(RetBool) { ThatEvent.consume(); return true; } } } catch( Throwable e ) { LogThis(". ", e); } return false; } }


No creo que haya una forma de agregar un oyente de clave "global" como lo que quiere hacer. Esta publicación del foro con una pregunta similar me respalda. Simplemente va a tener que agregarlos a cada componente. Sin embargo, esto solo debería hacerse una vez, así que supongo que puedes terminarlo y seguir adelante.