eventos del teclado
Wenas, a ver ... me preguntaba cómo se hace para poder escribir lo del teclado en un panel Canvas, porque hasta ahora sólo se usar el ratón de esta forma:
- implementando los interfaces MouseListener y MouseMotionListener
- en la funcion init() del applet pongo:
this.panelCanvas.addMouseListener(this);
this.panelCanvas.addMouseMotionListener(this);
- y añado al applet las funciones de cada interface:
public void mouseClicked(MouseEvent e){
}
public void mousePressed(MouseEvent e){
}
public void mouseReleased(MouseEvent e){
}
public void mouseEntered(MouseEvent e){
}
public void mouseExited(MouseEvent e){
}
public void mouseDragged(MouseEvent e){
}
public void mouseMoved(MouseEvent e){
}
A traves de estas funciones le paso los eventos del raton al panel "panelCanvas" de mi clase MiCanvas (que deriva de la clase Canvas).
Y me da la sensacion de que el interface KeyListener debe de funcionar de forma similar con el teclado, pero la verdad ... aun no lo he conseguido... asi que si algun alma caritativa me pudiera solucionar esto de una vez, le estaria muy agradecido.
Por cierto, de momento solo estoy acostumbrado a hacer cositas del AWT, asi que de momento no me interesa que me den soluciones relacionadas con SWING que luego si no me lio mas.
... un saludo.
- implementando los interfaces MouseListener y MouseMotionListener
- en la funcion init() del applet pongo:
this.panelCanvas.addMouseListener(this);
this.panelCanvas.addMouseMotionListener(this);
- y añado al applet las funciones de cada interface:
public void mouseClicked(MouseEvent e){
}
public void mousePressed(MouseEvent e){
}
public void mouseReleased(MouseEvent e){
}
public void mouseEntered(MouseEvent e){
}
public void mouseExited(MouseEvent e){
}
public void mouseDragged(MouseEvent e){
}
public void mouseMoved(MouseEvent e){
}
A traves de estas funciones le paso los eventos del raton al panel "panelCanvas" de mi clase MiCanvas (que deriva de la clase Canvas).
Y me da la sensacion de que el interface KeyListener debe de funcionar de forma similar con el teclado, pero la verdad ... aun no lo he conseguido... asi que si algun alma caritativa me pudiera solucionar esto de una vez, le estaria muy agradecido.
Por cierto, de momento solo estoy acostumbrado a hacer cositas del AWT, asi que de momento no me interesa que me den soluciones relacionadas con SWING que luego si no me lio mas.
... un saludo.
Te doy un consejo que no tiene nada que ver con tu pregunta pero está relacionada con la programacion orientada a eventos. Casi todas las interfaces XListener, son implementadas por clases abstractas XAdapter, clases adaptadoras que hacen que los métodos de la interfaz no sean abstractos, pero no hacen nada. De este modo heredando de las clases Adapter, evitas tener que sobreescribir métodos que serán vacíos, es decir, no harán nada, ahorrándote escribir líneas de código absurdas que hacen el código menos claro, por ejemplo, si de MouseListener sólo necesitas sobreescribir mouseClicked, haz que tu clase herede de MouseAdapter y que sólo sobreescriba ese método, así ganarás en claridad, tan importante cuando se actualiza la funcionalidad de un código o se buscan errores.
Gracias Diego, mira por donde eso de las clases Adapter no lo habia terminado de entender y de repente me das la pista para fijarme en su utilidad.
La verdad es que hay funciones del MouseListener que no las uso, pero que las suelo dejar ahi aparcadas por no saber de la clase MouseAdapter.
Pero tambien me he fijado que al no poder haber herencia multiple en java no podria heredar de MouseAdapter y MouseMotionAdapter a la vez para usar las funciones mouseClicked, mouseDragged y mouseMoved. Pero aun asi sigue siendo útil heredar de MouseAdapter, ya que luego se puede implementar MouseMotionListener que sólo tiene dos funciones y además las que precisamente se suelen usar mas (mouseDragged y mouseMoved).
Pero ... y si además también quisiera usar el teclado? ... weno ... creo que en ese caso ya tendría que implementar ... etc ... en fin ... un lio ... :p
weno ... un saludo y gracias ... ;-)
La verdad es que hay funciones del MouseListener que no las uso, pero que las suelo dejar ahi aparcadas por no saber de la clase MouseAdapter.
Pero tambien me he fijado que al no poder haber herencia multiple en java no podria heredar de MouseAdapter y MouseMotionAdapter a la vez para usar las funciones mouseClicked, mouseDragged y mouseMoved. Pero aun asi sigue siendo útil heredar de MouseAdapter, ya que luego se puede implementar MouseMotionListener que sólo tiene dos funciones y además las que precisamente se suelen usar mas (mouseDragged y mouseMoved).
Pero ... y si además también quisiera usar el teclado? ... weno ... creo que en ese caso ya tendría que implementar ... etc ... en fin ... un lio ... :p
weno ... un saludo y gracias ... ;-)
Bueno al grano si estas usando una version de java mayor o igual a la v1.4 entonces existe un metodo el cual debes invocar en tu canvas de la siguiente manera
miCanvas.setFocusable(true)
con esto tu canvas podra obtener el foco del teclado ya que un canvas no es como el TextField que muy bien sabes solo puedes escribir en el cuando este tenga el foco del teclado
espero te haya sido de ayuda!!!
miCanvas.setFocusable(true)
con esto tu canvas podra obtener el foco del teclado ya que un canvas no es como el TextField que muy bien sabes solo puedes escribir en el cuando este tenga el foco del teclado
espero te haya sido de ayuda!!!