Foros del Web » Programación para mayores de 30 ;) » Java »

Escucha de teclado con un JPANEL

Estas en el tema de Escucha de teclado con un JPANEL en el foro de Java en Foros del Web. Hola. Estoy haciendo una calculadora y tengo un problemilla. Deseo que que se puedan marcar los números desde el teclado. Para ello, he creado un ...
  #1 (permalink)  
Antiguo 15/06/2009, 05:32
 
Fecha de Ingreso: mayo-2008
Mensajes: 75
Antigüedad: 16 años
Puntos: 0
Escucha de teclado con un JPANEL

Hola. Estoy haciendo una calculadora y tengo un problemilla. Deseo que que se puedan marcar los números desde el teclado. Para ello, he creado un JPanel que contiene todos los botones y despues he hecho un método de escucha con "panel.addKeyListener" para que escuche las tecas que se pulsen del teclado. Pero no me funciona. ¿Alguien sabe donde está el error?



Esta es la parte del código que realiza eso:

Código:
     	JPanel panel =  new JPanel();
     	panel.setLayout(null);
     	
     	panel.add(pantalla);
     	panel.add(boton0);
     	panel.add(boton1);
     	panel.add(boton2);   
     	panel.add(boton3);
     	panel.add(boton4);
     	panel.add(boton5);
     
     	panel.addKeyListener( new KeyAdapter(){
     		public void keyPressed( KeyEvent e ){
     		System.out.println("Usted ha presionado la tecla: "+e.getKeyText(e.getKeyCode()));
     		}
     		}); 
     	
     	ventana.getContentPane().add(panel);
	ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
     	ventana.setResizable(false); //No permite ridimensionar la ventana
     	ventana.setLocationRelativeTo(null); //Centra la ventana en la pantalla
    	ventana.setVisible(true); //Ventana visible
Saludos,
  #2 (permalink)  
Antiguo 15/06/2009, 05:46
(Desactivado)
 
Fecha de Ingreso: abril-2009
Mensajes: 113
Antigüedad: 15 años
Puntos: 1
Respuesta: Escucha de teclado con un JPANEL

Falta bastante código.

En fin, ¿donde tienes un jTextField que recoja los números que pulsas?
  #3 (permalink)  
Antiguo 15/06/2009, 10:23
 
Fecha de Ingreso: mayo-2008
Mensajes: 75
Antigüedad: 16 años
Puntos: 0
Respuesta: Escucha de teclado con un JPANEL

No tengo ese JTextField que tu dices. Te pongo todo el código:

Código:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

 
public class Calculadora{
	
	static float numero;
	static float ans;
	static String operacion;
	static float solucion;
	static JTextField pantalla = new JTextField(); //Declaracion de la pantalla
	
	static boolean isOperador (String str){
		if ((str == "+") || (str == "-") || (str == "*") || (str == "/")){
			return true;
		}
		else{
			return false;
		}
	}
	
	//Escribe en la pantalla
	static void Escribir (String str){
		if (str.endsWith(".0")){
			str = str.replace(".0","");
		}
		pantalla.setText(str);
	}
	
	static void Anadir (String str){
		if ( isOperador(str)){
			ans = numero; //Se guarda el numero actual de la pantalla.
			numero = 0;  //Se limpia el numero
			operacion = str; //Se guarda la operacion a realizar
		}
		else if (str == "."){
			
		}
		else if (str == "="){ //Se realiza la operacion
			
			if (operacion == "+"){
				solucion = ans + numero;
			}
			if (operacion == "-"){
				solucion = ans - numero;
			}
			if (operacion == "*"){
				solucion = ans * numero;
			}
			if (operacion == "/"){
				solucion = ans / numero;
			}
			Escribir(Float.toString(solucion));
			numero = solucion; //Para seguir la operacion
		}
		else{
			numero = (numero*10) + Float.parseFloat(str); //Si es un numero, se va creando por decimas
		}
	}
	
	
	
	public static void main (String [] arg){
		JFrame ventana = new JFrame("Calculadora");
		ventana.setSize(330,400); //Tamaño de la ventana
		
		//CONSTRUCCION DE LA PANTALLA
		pantalla.setBounds(new Rectangle(30,20,261,60));
		Font f = new Font( "Arial",Font.BOLD,22 );
		pantalla.setFont(f);
		pantalla.setHorizontalAlignment(SwingConstants.RIGHT);
		//CONSTRUCCION DE BOTONES
		JButton boton0 = new JButton(" 0 ");
     	boton0.setBounds(new Rectangle(30,280,50,50));
     	JButton boton1 = new JButton(" 1 ");
     	boton1.setBounds(new Rectangle(30,220,50,50));
     	JButton boton2 = new JButton(" 2 ");
     	boton2.setBounds(new Rectangle(90,220,50,50));
     	JButton boton3 = new JButton(" 3 ");
     	boton3.setBounds( new Rectangle(150,220,50,50));
     	JButton boton4 = new JButton(" 4 ");
     	boton4.setBounds( new Rectangle(30,160,50,50));
     	JButton boton5 = new JButton(" 5 ");
     	boton5.setBounds( new Rectangle(90,160,50,50));
     	JButton boton6 = new JButton(" 6 ");
     	boton6.setBounds( new Rectangle(150,160,50,50));
     	JButton boton7 = new JButton(" 7 ");
     	boton7.setBounds( new Rectangle(30,100,50,50));
     	JButton boton8 = new JButton(" 8 ");
     	boton8.setBounds( new Rectangle(90,100,50,50));
     	JButton boton9 = new JButton(" 9 ");
     	boton9.setBounds( new Rectangle(150,100,50,50));
     	
     	
     	JButton botonSuma = new JButton(" + ");
     	botonSuma.setBounds( new Rectangle(210,280,80,50));
     	JButton botonResta = new JButton(" - ");
     	botonResta.setBounds( new Rectangle(210,220,80,50));
     	JButton botonPor = new JButton(" X ");
     	botonPor.setBounds( new Rectangle(210,160,80,50));
     	JButton botonDiv = new JButton(" / ");
     	botonDiv.setBounds( new Rectangle(210,100,80,50));
     	
     	JButton botonComa = new JButton(" . ");
     	botonComa.setBounds( new Rectangle(90,280,50,50));
     	JButton botonRes = new JButton("=");
     	botonRes.setBounds( new Rectangle(150,280,50,50));
     
     	
     	//COMPORTAMIENTO DE LA APLICACION SEGUN LOS EVENTOS DEL USUARIO
     	boton0.addActionListener( 
     			new ActionListener() { public void actionPerformed(ActionEvent e) { Anadir("0"); Escribir(Float.toString(numero));  }}
     	);
     	
     	boton1.addActionListener( 
     			new ActionListener() { public void actionPerformed(ActionEvent e) { Anadir("1"); Escribir(Float.toString(numero)); }}
     	);
     	boton2.addActionListener( 
     			new ActionListener() { public void actionPerformed(ActionEvent e) { Anadir("2"); Escribir(Float.toString(numero)); }}
     	);
     	boton3.addActionListener( 
     			new ActionListener() { public void actionPerformed(ActionEvent e) { Anadir("3"); Escribir(Float.toString(numero)); }}
     	);
     	boton4.addActionListener( 
     			new ActionListener() { public void actionPerformed(ActionEvent e) { Anadir("4"); Escribir(Float.toString(numero)); }}
     	);
     	boton5.addActionListener( 
     			new ActionListener() { public void actionPerformed(ActionEvent e) { Anadir("5"); Escribir(Float.toString(numero)); }}
     	);
     	boton6.addActionListener( 
     			new ActionListener() { public void actionPerformed(ActionEvent e) { Anadir("6"); Escribir(Float.toString(numero)); }}
     	);
     	boton7.addActionListener( 
     			new ActionListener() { public void actionPerformed(ActionEvent e) { Anadir("7"); Escribir(Float.toString(numero)); }}
     	);
     	boton8.addActionListener( 
     			new ActionListener() { public void actionPerformed(ActionEvent e) { Anadir("8"); Escribir(Float.toString(numero)); }}
     	);
     	boton9.addActionListener( 
     			new ActionListener() { public void actionPerformed(ActionEvent e) { Anadir("9"); Escribir(Float.toString(numero)); }}
     	);
     	botonSuma.addActionListener( 
     			new ActionListener() { public void actionPerformed(ActionEvent e) { Anadir("+"); Escribir("+"); }}
     	);
     	botonResta.addActionListener( 
     			new ActionListener() { public void actionPerformed(ActionEvent e) { Anadir("-"); Escribir("-"); }}
     	);
     	botonPor.addActionListener( 
     			new ActionListener() { public void actionPerformed(ActionEvent e) { Anadir("*"); Escribir("*"); }}
     	);
     	botonDiv.addActionListener( 
     			new ActionListener() { public void actionPerformed(ActionEvent e) { Anadir("/"); Escribir("/"); }}
     	);
     	botonComa.addActionListener( 
     			new ActionListener() { public void actionPerformed(ActionEvent e) { Anadir("."); Escribir("."); }}
     	);
     	botonRes.addActionListener( 
     			new ActionListener() { public void actionPerformed(ActionEvent e) { Anadir("=");  }}
     	);
     	
     	
     	
     	boton0.addKeyListener( new KeyAdapter(){
     		public void keyPressed( KeyEvent e ){
     		System.out.println("Usted ha presionado la tecla: "+e.getKeyText(e.getKeyCode()));
     		}
     		}); 
     	
     	
     	//CONSTRUIMOS LA VENTANA
     	ventana.add(pantalla);
     	ventana.add(boton0);
     	ventana.add(boton1);
     	ventana.add(boton2);   
     	ventana.add(boton3);
     	ventana.add(boton4);
     	ventana.add(boton5);
     	ventana.add(boton6);
     	ventana.add(boton7);
     	ventana.add(boton8);
     	ventana.add(boton9);
     	ventana.add(botonSuma);
     	ventana.add(botonResta);
     	ventana.add(botonPor);
     	ventana.add(botonDiv);
     	ventana.add(botonComa);
     	ventana.add(botonRes);
     	
		ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  //Permite cerrar la ventana
     	ventana.setLayout(null);  //Para que aparezcan los botones correctamente situados.
     	ventana.setResizable(false); //No permite ridimensionar la ventana
     	ventana.setLocationRelativeTo(null); //Centra la ventana en la pantalla
    	ventana.setVisible(true); //Ventana visible
	}
}
  #4 (permalink)  
Antiguo 15/06/2009, 15:11
(Desactivado)
 
Fecha de Ingreso: abril-2009
Mensajes: 113
Antigüedad: 15 años
Puntos: 1
Respuesta: Escucha de teclado con un JPANEL

Creo que te complicas mucho. Yo este programa no lo he hehco en Java, pero me acuerdo hace muuuuucho tiempo era uno de los que se hacian en visual c++.

pantalla es tu JTextField. Utilizando el teclado del ordenador tiene que pillarte el número.
Me tendria que repasar de nuevo el código, pero creo que no hace bien coger los numeros. Creo que solo te coge la ultima cifra ¿no?.

Le echaré un vistazo.

En principio, cuando se pulsa un JButton se ha de mostrar en el JTextField pantalla. ¿Que pasa cuando pulsas otro digito? Esto es importante. En escribir() utilizas la cadena str ¿Como formas esa cadena? ¿Tu problema es que solo ves el ultimo digito?.

Un saludo
  #5 (permalink)  
Antiguo 15/06/2009, 15:57
 
Fecha de Ingreso: mayo-2008
Mensajes: 75
Antigüedad: 16 años
Puntos: 0
Respuesta: Escucha de teclado con un JPANEL

No no. A ver. Yo estoy haciendo la calculadora en Java porque me dedico a practicar el lenguaje. La calculadora funciona prefectamente , salen los dígitos y todo. Sino compruebala tú mismo. Yo lo que quiero es que sin que esté el "foco" en la "pantalla" , simplemente teniendo seleccionada la ventana, me coja los numeros del teclado . Con eventos. Como las calculadoras normales.

  #6 (permalink)  
Antiguo 19/06/2009, 17:20
 
Fecha de Ingreso: diciembre-2007
Mensajes: 36
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Escucha de teclado con un JPANEL

Creo que yo agregaria un keyListener para ventana, y le programaria con un case en el evento keyPressed (o keyTyped o keyReleased, para el caso es lo mismo creo) ejecutaria la accion correspondiente en caso que sea numero (0-9) o operacion (+-*/) usando en JButton correspondiente (total los botones ya estan programados y funcionan ok)
Avisame como te va, porque estoy queriendo hacer algo parecido, pero no con una calculadora, sino con un prog que guarda cadenas :D
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:22.