HAGALO USTED MISMO: PROGRAMANDO UN SENSOR DE TECLAS O KEY LISTENER EN JAVA MAS OTRAS HERRAMIENTAS COMO UN CRONOMETRO O TEMPORIZADOR Y UNA FUNCION CON RETORNO.
Como crear e implementar un Key Listener o sensor de teclas en Java fácil y rápido, además de otras herramientas como un cronómetro y un método publico que trabaja con un input de usuario y devuelve un resultado.
La mayoría de los tutoriales que he visto en línea no son muy claros sobre como implementar el key listener, y como vincularlo a elementos del entorno, como una ventana, por eso hago este tutorial para implementarlo a un componente de una aplicación java de forma sencilla y rápida: lo más práctico en casos generales es vincularlo a la ventana principal de programa: trabajamos en este caso con NetBeans IDE 8.2.
//PRIMERO LO PRIMERO: LOS IMPORTS
package sensorteclas;
// ESTO NOS SIRVE PARA GENERAR LA VENTANA DE LA APLICACIÓN Y LOS GRÁFICOS
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JFrame;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
//CON ESTO CONFIGURAMOS EL CRONÓMETRO
import java.util.Calendar;
import java.util.Date;
//ESTO ES PARA RECIBIR EL INPUT DE USUARIO Y PARA EL SENSOR DE TECLAS
import java.util.Scanner;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
EMPEZAMOS ASI:
public class SensorTeclas extends JFrame { // LA CLASE AFECTA AL CREA VENTANAS JFRAME
//AQUÍ LAS VARIABLES GLOBALES QUE USARAN TODOS LOS METODOS
public static double area = 0;
public static double perimetro = 0;
public static double r = 0;
public static double di;
public static double coordx = 100;
public static double coordy = 100;
//VARIABLES PARA EL CRONÓMETRO
public static long ainicio = System.currentTimeMillis();
public static long iniciox = System.currentTimeMillis();
public static long inicialx = System.currentTimeMillis();
//CREAMOS UN METODO QUE IMPORTE UN VALOR USER INPUT Y EFECTUE UNA TAREA
//DEVOLVIENDO UN RESULTADO: EN ESTE CASO INGRESANDO UNA DIAGONAL
//DEVUELVE UN CUADRADO DE LADOS CONSECUENTES UTILIZANDO PITAGORAS
public double diagonal(double d){
r = Math.sqrt(Math.pow(d,2)/2);
return r;
}
//CREAMOS LA CLASE PUBLICA ESTATICA SENSOR QUE IMPLEMENTA KEY LISTENER
public static class sensor implements KeyListener{
//CREAMOS LOS PROCEDIMIENTOS PARA RECONOCER TECLAS: CUANDO SE
//PRESIONE IZQUIERDA O DERECHA EL OBJETO SE MOVERA
public void keyPressed (KeyEvent e){
if(e.getKeyCode()==KeyEvent.VK_UP){
coordx = coordx - 0;
}else if(e.getKeyCode()==KeyEvent.VK_DOWN){
coordx = coordx - 0;
}else if(e.getKeyCode()==KeyEvent.VK_RIGHT){
coordx = coordx + 28;
}else if(e.getKeyCode()==KeyEvent.VK_LEFT){
coordx = coordx - 28;
}
}
//ESTOS VOIDS O METODOS SIN RETORNO SON PARA CUANDO LA TECLA SE
//SUELTA Y PARA CUANDO LA LETRA SE IMPRIME
public void keyReleased (KeyEvent e){}
public void keyTyped (KeyEvent e){}
}
//CREAMOS UN OBJETO: EN ESTE CASO UNA PIEZA COMPUESTA DE 4 BLOQUES UNO
//ARRIBA DEL OTRO: ANCHO Y ALTO DE CADA BLOQUE ES EL RESULTADO DE LA
//FUNCIÓN DIAGONAL DEFINIDA ANTERIORMENTE
public static class piezai extends JComponent {
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
double width = r;
double height = r;
Rectangle2D cuboa = new Rectangle2D.Double(coordx, coordy, width, height);
g2.draw(cuboa);
Rectangle2D cubob = new Rectangle2D.Double(coordx, coordy+28, width, height);
g2.draw(cubob);
Rectangle2D cuboc = new Rectangle2D.Double(coordx, coordy+56, width, height);
g2.draw(cuboc);
Rectangle2D cubod = new Rectangle2D.Double(coordx, coordy+84, width, height);
g2.draw(cubod);
}
}
//EL METODO PRINCIPAL
public static void main(String[] args) {
//SCANNER PIDE EL DATO PARA LA FUNCION
Scanner d = new Scanner(System.in);
System.out.println("Ingrese diagonal del cuadrado";
di = d.nextInt();
System.out.println("Ingreso el valor "+di);
//PARA USAR EL METODO DIAGONAL CREAMOS UNA INSTANCIA DESDE LA CLASE
//PRINCIPAL
double resultado = new SensorTeclas().diagonal(di);
System.out.println("El lado del cuadrado es "+resultado);
//AHORA IMPLEMENTEMOS UN TEMPORIZADOR O CRONÓMETRO: TENEMOS ESTAS
//DOS FUNCIONES PARA HACERLO:
Long temporizador = System.currentTimeMillis();
System.out.println("El tiempo actual es "+temporizador);
long millis = Calendar.getInstance().getTimeInMillis();
System.out.println("El tiempo actual es "+millis);
//CREAMOS UNA NUEVA VENTANA CON BOTON DE CIERRE Y DE ESTA FORMA
//VINCULAMOS EL SENSOR:
JFrame window = new JFrame();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setBounds(30, 30, 1024, 768);
window.addKeyListener(new sensor()); <<< CREAMOS NUEVA INSTANCIA DE SENSOR
//EL TEMPORIZADOR FUNCIONA DE ESTA FORMA: MIENTRAS INICIOX SEA MENOR
//A INICIALX MAS TREINTA Y UN MIL MILISEGUNDOS EL CICLO ITERA:
while (iniciox < inicialx + 0000000031000){
ainiciox = System.currentTimeMillis();
//CREAMOS UN SEGMENTO DE TIEMPO: SI AINICIOX ES MAYOR QUE INICIOX
//MAS MIL QUINIENTOS MILISEGUNDOS (APROX 1 SEGUNDO Y MEDIO)
//HACE LO DEL IF. SI LA DESIGUALDAD SE ROMPE, AINICIOX VUELVE A
//CARGAR EL TIEMPO ARRIBA
if (ainiciox > iniciox + 0000000001500){
iniciox = System.currentTimeMillis();
//EL OBJETO PIEZAI AVANZARA 28 PUNTOS EN LA VENTANA: CUANDO
//PRESIONEMOS IZQUIERDA O DERECHA, SE MOVERA 28 PUNTOS EN ESA
//DIRECCION
coordy = coordy + 28;
window.getContentPane().add(new piezai());
window.setVisible(true);
System.out.println("ACTUALIZANDO";
System.out.println("ainicioact"+ainicio);
System.out.println("inicioxact"+iniciox);
}
}
System.out.println("termino";
}
}
ESPERO LES HAYA SERVIDO, CUALQUIER CORRECCION O PREGUNTA, EN COMENTARIOS SERA BIENVENIDA, HASTA LA VISTA SI TE SIRVIO DEJA PUNTOS. SI VAN A USAR EL CODIGO FIJENSE BIEN LOS CORCHETES PORQUE EL CUADRO DE CREAR POST NO TIENE BOTONES PARA PONER SANGRIA Y AL PEGARLO SE DESENCAJO TODO, BAJATE EL CODIGO DE mediafire punto com /file /vkieetdzokwuwdq/ sensor.txt
Como crear e implementar un Key Listener o sensor de teclas en Java fácil y rápido, además de otras herramientas como un cronómetro y un método publico que trabaja con un input de usuario y devuelve un resultado.
La mayoría de los tutoriales que he visto en línea no son muy claros sobre como implementar el key listener, y como vincularlo a elementos del entorno, como una ventana, por eso hago este tutorial para implementarlo a un componente de una aplicación java de forma sencilla y rápida: lo más práctico en casos generales es vincularlo a la ventana principal de programa: trabajamos en este caso con NetBeans IDE 8.2.
//PRIMERO LO PRIMERO: LOS IMPORTS
package sensorteclas;
// ESTO NOS SIRVE PARA GENERAR LA VENTANA DE LA APLICACIÓN Y LOS GRÁFICOS
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JFrame;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
//CON ESTO CONFIGURAMOS EL CRONÓMETRO
import java.util.Calendar;
import java.util.Date;
//ESTO ES PARA RECIBIR EL INPUT DE USUARIO Y PARA EL SENSOR DE TECLAS
import java.util.Scanner;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
EMPEZAMOS ASI:
public class SensorTeclas extends JFrame { // LA CLASE AFECTA AL CREA VENTANAS JFRAME
//AQUÍ LAS VARIABLES GLOBALES QUE USARAN TODOS LOS METODOS
public static double area = 0;
public static double perimetro = 0;
public static double r = 0;
public static double di;
public static double coordx = 100;
public static double coordy = 100;
//VARIABLES PARA EL CRONÓMETRO
public static long ainicio = System.currentTimeMillis();
public static long iniciox = System.currentTimeMillis();
public static long inicialx = System.currentTimeMillis();
//CREAMOS UN METODO QUE IMPORTE UN VALOR USER INPUT Y EFECTUE UNA TAREA
//DEVOLVIENDO UN RESULTADO: EN ESTE CASO INGRESANDO UNA DIAGONAL
//DEVUELVE UN CUADRADO DE LADOS CONSECUENTES UTILIZANDO PITAGORAS
public double diagonal(double d){
r = Math.sqrt(Math.pow(d,2)/2);
return r;
}
//CREAMOS LA CLASE PUBLICA ESTATICA SENSOR QUE IMPLEMENTA KEY LISTENER
public static class sensor implements KeyListener{
//CREAMOS LOS PROCEDIMIENTOS PARA RECONOCER TECLAS: CUANDO SE
//PRESIONE IZQUIERDA O DERECHA EL OBJETO SE MOVERA
public void keyPressed (KeyEvent e){
if(e.getKeyCode()==KeyEvent.VK_UP){
coordx = coordx - 0;
}else if(e.getKeyCode()==KeyEvent.VK_DOWN){
coordx = coordx - 0;
}else if(e.getKeyCode()==KeyEvent.VK_RIGHT){
coordx = coordx + 28;
}else if(e.getKeyCode()==KeyEvent.VK_LEFT){
coordx = coordx - 28;
}
}
//ESTOS VOIDS O METODOS SIN RETORNO SON PARA CUANDO LA TECLA SE
//SUELTA Y PARA CUANDO LA LETRA SE IMPRIME
public void keyReleased (KeyEvent e){}
public void keyTyped (KeyEvent e){}
}
//CREAMOS UN OBJETO: EN ESTE CASO UNA PIEZA COMPUESTA DE 4 BLOQUES UNO
//ARRIBA DEL OTRO: ANCHO Y ALTO DE CADA BLOQUE ES EL RESULTADO DE LA
//FUNCIÓN DIAGONAL DEFINIDA ANTERIORMENTE
public static class piezai extends JComponent {
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
double width = r;
double height = r;
Rectangle2D cuboa = new Rectangle2D.Double(coordx, coordy, width, height);
g2.draw(cuboa);
Rectangle2D cubob = new Rectangle2D.Double(coordx, coordy+28, width, height);
g2.draw(cubob);
Rectangle2D cuboc = new Rectangle2D.Double(coordx, coordy+56, width, height);
g2.draw(cuboc);
Rectangle2D cubod = new Rectangle2D.Double(coordx, coordy+84, width, height);
g2.draw(cubod);
}
}
//EL METODO PRINCIPAL
public static void main(String[] args) {
//SCANNER PIDE EL DATO PARA LA FUNCION
Scanner d = new Scanner(System.in);
System.out.println("Ingrese diagonal del cuadrado";
di = d.nextInt();
System.out.println("Ingreso el valor "+di);
//PARA USAR EL METODO DIAGONAL CREAMOS UNA INSTANCIA DESDE LA CLASE
//PRINCIPAL
double resultado = new SensorTeclas().diagonal(di);
System.out.println("El lado del cuadrado es "+resultado);
//AHORA IMPLEMENTEMOS UN TEMPORIZADOR O CRONÓMETRO: TENEMOS ESTAS
//DOS FUNCIONES PARA HACERLO:
Long temporizador = System.currentTimeMillis();
System.out.println("El tiempo actual es "+temporizador);
long millis = Calendar.getInstance().getTimeInMillis();
System.out.println("El tiempo actual es "+millis);
//CREAMOS UNA NUEVA VENTANA CON BOTON DE CIERRE Y DE ESTA FORMA
//VINCULAMOS EL SENSOR:
JFrame window = new JFrame();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setBounds(30, 30, 1024, 768);
window.addKeyListener(new sensor()); <<< CREAMOS NUEVA INSTANCIA DE SENSOR
//EL TEMPORIZADOR FUNCIONA DE ESTA FORMA: MIENTRAS INICIOX SEA MENOR
//A INICIALX MAS TREINTA Y UN MIL MILISEGUNDOS EL CICLO ITERA:
while (iniciox < inicialx + 0000000031000){
ainiciox = System.currentTimeMillis();
//CREAMOS UN SEGMENTO DE TIEMPO: SI AINICIOX ES MAYOR QUE INICIOX
//MAS MIL QUINIENTOS MILISEGUNDOS (APROX 1 SEGUNDO Y MEDIO)
//HACE LO DEL IF. SI LA DESIGUALDAD SE ROMPE, AINICIOX VUELVE A
//CARGAR EL TIEMPO ARRIBA
if (ainiciox > iniciox + 0000000001500){
iniciox = System.currentTimeMillis();
//EL OBJETO PIEZAI AVANZARA 28 PUNTOS EN LA VENTANA: CUANDO
//PRESIONEMOS IZQUIERDA O DERECHA, SE MOVERA 28 PUNTOS EN ESA
//DIRECCION
coordy = coordy + 28;
window.getContentPane().add(new piezai());
window.setVisible(true);
System.out.println("ACTUALIZANDO";
System.out.println("ainicioact"+ainicio);
System.out.println("inicioxact"+iniciox);
}
}
System.out.println("termino";
}
}
ESPERO LES HAYA SERVIDO, CUALQUIER CORRECCION O PREGUNTA, EN COMENTARIOS SERA BIENVENIDA, HASTA LA VISTA SI TE SIRVIO DEJA PUNTOS. SI VAN A USAR EL CODIGO FIJENSE BIEN LOS CORCHETES PORQUE EL CUADRO DE CREAR POST NO TIENE BOTONES PARA PONER SANGRIA Y AL PEGARLO SE DESENCAJO TODO, BAJATE EL CODIGO DE mediafire punto com /file /vkieetdzokwuwdq/ sensor.txt