Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > No detección de pulsación de teclas desde applet

Hola, que hay.
Resulta que no consigo de ninguna forma leer las pulsaciones de las teclas desde un applet, da la sensación de que las ignora y no responde a tales eventos.

Yo diria que el problema se encuentra en el addKeyListener qpues la sensacion de que le falta algo y por eso no se llega nunca a ejecutarse el codigo que hay dentro del metodo KeyPressed.

Os muestro el codigo:


import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class leeTecladoDesdeApplet extends Applet implements KeyListener
{
private static y=12;

public void init()
{
addKeyListener(this);
}

public void start()
{
}

public void stop()
{
}

public void keyPressed(KeyEvent e)
{
y++;
}

public void keyReleased(KeyEvent e) {}

public void keyTyped(KeyEvent e){}

public void paint(Graphics g)
{
g.setColor(Color.red);
g.drawString("Hola!", 10, y);
}
}


La idea es que cada vez que se pulse una tecla se llame al metodo KeyPressed() el cual se encarga de incrementar en 1 el atributo 'y', por lo que va apareciendo el mensaje "Hola!" cada vez más abajo en la pantalla sin embargo, no ocurre nada.

Como decia, da la sensación de que el listener no es del todo correcto y no se acopla al applet no realizandose nunca la llamada al metodo 'KeyPressed()' y por tanto ignorando las pulsaciones de teclas, no lo se.

Agradezco la ayuda, gracias y saludos.

diciembre 29, 2011 | Unregistered Commenterluisiyes

agregale una llamada al metodo paint dentro del metodo keyPressed();

public void keyPressed(KeyEvent e)
{
y++;
paint(null);
}

o sino

public void keyPressed(KeyEvent e)
{
y++;
g.setColor(Color.red);
g.drawString("Hola!", 10, y);
}

la idea es que tu keyPressed no hace nada mas que aumentar "y"... o sea ese es el evento, el que responde a la tecla del usuario... pero solo aumenta "y", nada mas

diciembre 29, 2011 | Unregistered Commenteremanuel

Hola, gracias por la respuesta, pero es que el problema es que ni siquiera se llega a llamar el metodo KeyPressed...

Y claro que hace solamente eso: incrementar la variable 'y', pero como te digo el problema es que no encuentro la forma de conectar el evento de pulsacion de tecla con la ejecución de dicho metodo...

diciembre 29, 2011 | Unregistered Commenterluisiyes

te pido disculpas por la linea

paint(null);

esta daría problemas

pero insisto... (ahora corregido)

public void keyPressed(KeyEvent e)
{
y++;
paint(this.getGraphics());
}

anda... lo probé bajo netbeans.

otra cosa. declaraste como static la variable y y luego la querés modificar en un ámbito variable... eso está mal.

private int y=12;

y anda...

este es el codigo con que probé

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

/**
*
* @author Emanuel
*/

public class NewApplet extends Applet implements KeyListener{

private int y = 12;

public void init() {

}

public void start() {
addKeyListener(this);
}

public void stop() {
}

public void keyPressed(KeyEvent e) {
System.out.print("ingresa en el evento keyPressed");
y=10+ y; //porque qdaba muy junto aumentando de a uno
paint(this.getGraphics());
}

public void keyReleased(KeyEvent e) {
}

public void keyTyped(KeyEvent e) {

}

public void paint(Graphics g) {
g.setColor(Color.red);
g.drawString("Hola!", 10, y);
}

}

diciembre 29, 2011 | Unregistered Commenteremanuel

Sí, el evento lo registraba pero era un problema con el sistema de dibujado de java...
Al venir de programación modular, C y demás, donde hay una secuencialidad mas clara no hay estos problemas que presenta java, al menos a los que no estamos familiarizados con el.
El caso es que tras estudiar las caracteristicas de paint, repaint, update..., me he hecho un sistema mas eficiente donde es update el que realiza el trabajo que por defecto se le asigna a paint de forma que evito la llamada de update a paint y de paso no implementando el borrado que realiza update en su implementacion original el cual provoca parpadeo..
Eso por un lado, porque por otro al final me he hecho una rutina guapa de lectura de teclado videojueguil (se me ha encendido la bombilla jaja) al ver el sistema de interrupciones con los metodos Keyup y keydown que se gasta java y al recordar mis viejos tiempos de programar graficos con lectura de teclado basado en un array que registra los estados actuales de cada una de las teclas, con lo que se evita el poco natural movimiento estilo escritura de pausa inicial y repeticiones, y consiguiendo en cambio un movimiento fluido ininterrumpido como Dios manda jajaj

Y nada, que gracias por tu interes y ayuda, saludos y feliz año nuevo ;-)

diciembre 31, 2011 | Unregistered Commenterluisiyes