Hola,
Cita:
Iniciado por cribelo ... Ahora si podes me podes explicar mas o menos como funciona este codigo?...
Básicamente el sistema de eventos de Java funciona enviando mensajes entre clases, así que cuando presionas una tecla en el teclado se llaman a una serie de Listeners (que no son mas que clases con ciertas interfaces que permiten llamar a métodos específicos). Si observas detenidamente tiene la misma estructura que cuando asignas un Listener a un botón o similar.
Código Java:
Ver originaljava.awt.KeyboardFocusManager.
getCurrentKeyboardFocusManager().
addKeyEventDispatcher(aquí el que recibe el evento);
jButton1.addMouseListener(aquí el que recibe el evento);
La clase que implementa la inteface para 'recibir el evento' no es mas que java.awt.KeyEventDispatcher, y esta debe implementar el método dispatchEvent para poder manejar el evento, al igual que un KeyListener o MouseListener.
Código Java:
Ver originalprivate java.awt.KeyEventDispatcher dispatcher;
dispatcher = new java.awt.KeyEventDispatcher() {
@Override
public boolean dispatchKeyEvent
(java.
awt.
event.
KeyEvent e
) { // Aca se maneja el evento igual que cualquier otro KeyListener
return false;
}
};
En el primer ejemplo use un delegado para poder llamar a los métodos del mismo, así no era necesario usar un método estático, sino llamar exactamente al mismo objeto (no es ni siquiera un clon, es el mismo) que llama el MouseListener, eliminando la necesidad de crear métodos estáticos.
Código Java:
Ver originaldelegate.mouseClicked(
new java.
util.
Date().
getTime(),
0,
0,
0,
1,
false)); }
Por último en el dispose, elimino el Listener, sino al presionar F5 en otra ventana u otro objeto generaría un error. El manejador del KeyboardFocusManager funciona a nivel de todo el sistema Swing o AWT, así que si presionas F5 en otra ventana aún funcionará correctamente (si quieres eliminar eso tendrías que usar un JDialog modal).
Código Java:
Ver original@Override
public void dispose() {
java.awt.KeyboardFocusManager.
getCurrentKeyboardFocusManager().
removeKeyEventDispatcher(dispatcher);
super.dispose();
}
Saludos,