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

Mini Calculadora (Suma) - ¿Cómo separar y almacenar los 2 valores a sumar?

Estas en el tema de Mini Calculadora (Suma) - ¿Cómo separar y almacenar los 2 valores a sumar? en el foro de Java en Foros del Web. Hola, soy un novato en esto de Java y estoy intentando crear una calculadora. Estoy empezando por algo sencillo por lo que la calculadora de ...
  #1 (permalink)  
Antiguo 10/11/2011, 13:33
 
Fecha de Ingreso: noviembre-2011
Mensajes: 18
Antigüedad: 12 años, 5 meses
Puntos: 1
Pregunta Mini Calculadora (Suma) - ¿Cómo separar y almacenar los 2 valores a sumar?

Hola, soy un novato en esto de Java y estoy intentando crear una calculadora. Estoy empezando por algo sencillo por lo que la calculadora de momento solo suma. El proceso es el siguiente:

He creado un JTextField donde se almacenan los datos y dos botones (+ y =). El usuario introduce el primer valor y le da al botón "+", entonces el programa almacena el valor y borra el JTextField. EL usuario introduce el segundo valor y al darle al botón "=", el programa almacena el segundo valor y realiza la operación. El resultado de la operación se muestra en el JTextField.

He creado el programa siguiendo esos pasos y al ejecutarlo y darle al botón de igual me salta un error con doscientas líneas rojas en el Eclipse y el programa no hace nada.

Os dejo el código para que le echéis un vistazo y me digaís como correjirlo o en caso de que este mal, cómo hacerlo bien.

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

public class Formulario extends JFrame implements ActionListener {
	
	private JTextField textfield1;
	private JButton boton1, boton2;
	
	public Formulario (){
		setLayout(null);
		textfield1= new JTextField();
		textfield1.setBounds(10, 10, 100, 50);
		add(textfield1);
		boton1= new JButton("+");
		boton1.setBounds(10, 130, 50, 50);
		add(boton1);
		boton2=new JButton ("=");
		boton2.setBounds(120, 130, 50, 50);
		add(boton2);
		boton1.addActionListener(this);
		boton2.addActionListener(this);
	}
	
	public void actionPerformed (ActionEvent e){
		String cad1, cad2;
		if (e.getSource()==boton1){
			cad1= textfield1.getText();
			textfield1.setText(null);
		}
		
		if (e.getSource()==boton2){
			cad2= textfield1.getText();
			int x= Integer.parseInt(cad1);
			int y= Integer.parseInt(cad2);
			int suma= x+y;
			String resultado= String.valueOf(suma);
			textfield1.setText(null);
			textfield1.setText(resultado);
		}	
	}
	
	public static void main (String[]ar){
		Formulario calc= new Formulario();
		calc.setBounds(800, 400, 500, 500);
		calc.setResizable(false);
		calc.setVisible(true);
	}
	
	

}
Este código me dice que la variable "cad1" en el segundo if del actionPerformed no está inicializada y no me deja arrancarlo (eso lo entiendo). Si inicializo con un "null" la variable dentro del actionPerfomed no me da el error y me deja arrancar el progrma, pero al comprobar si funciona me salta el error que os he coemtnado antes.

Recordad que soy novato por lo que os agradecería que no lo deís todo por sabido.

A ver si podeís ayudarme con esto. Muchas gracias por adelantado.

Salu2, VanRadeix.
  #2 (permalink)  
Antiguo 10/11/2011, 13:56
Avatar de JxDarkAngel  
Fecha de Ingreso: septiembre-2009
Mensajes: 82
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Mini Calculadora (Suma) - ¿Cómo separar y almacenar los 2 valores a sumar?

te voy a coloar el Codigo en C#, espero te sirva para poder pasarlo a Java

double Valor1=0;
double Valor2=0;

//Evento click del boton
private void Button1_Click(object sender, evenArgs e)
{
if(Button1.Text=="+")
{
Valor1=double.Parse(txtCaja.Text);
txtCaja.Text="";
Button1.Text= "=";
}
else
{
Valor2=double.Parse(txtCaja.Text);
txtResultado.Text= (Valor1 + Valor2 ).ToString();
txtCaja.Text="";
Button1.Text= "+";
}
}

Última edición por JxDarkAngel; 10/11/2011 a las 13:58 Razón: faltaba codigo
  #3 (permalink)  
Antiguo 10/11/2011, 14:26
 
Fecha de Ingreso: noviembre-2011
Mensajes: 18
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Mini Calculadora (Suma) - ¿Cómo separar y almacenar los 2 valores a sumar?

Cita:
Iniciado por JxDarkAngel Ver Mensaje
te voy a coloar el Codigo en C#, espero te sirva para poder pasarlo a Java

double Valor1=0;
double Valor2=0;

//Evento click del boton
private void Button1_Click(object sender, evenArgs e)
{
if(Button1.Text=="+")
{
Valor1=double.Parse(txtCaja.Text);
txtCaja.Text="";
Button1.Text= "=";
}
else
{
Valor2=double.Parse(txtCaja.Text);
txtResultado.Text= (Valor1 + Valor2 ).ToString();
txtCaja.Text="";
Button1.Text= "+";
}
}
Hola,

Muchas gracias por responder tan rápido. El primer problema es que no tengo ni idea de C#. Java es mi primer lenguaje, por lo que soy doble novato. He intentado ajustar tus indicaciones con mis conocimientos, pero no me funciona. También he probado a cambiar las variables String (cad1 y cad2) a double, pero después no sé como coger el double de la caja de texto. Te paso el error que me da, por si sirve de algo. Mañana me pondré a ver si descubro como se manejan las variables "double" con la caja de texto.

Error:

Código:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: null
	at java.lang.Integer.parseInt(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at Formulario.actionPerformed(Formulario.java:35)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: null
	at java.lang.Integer.parseInt(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at Formulario.actionPerformed(Formulario.java:35)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
  #4 (permalink)  
Antiguo 10/11/2011, 15:46
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Mini Calculadora (Suma) - ¿Cómo separar y almacenar los 2 valores a sumar?

Sólo tienes que poner las variables cad1 y cad 2 como atributos de la clase.

Código Java:
Ver original
  1. import javax.swing.*;
  2. import java.awt.event.*;
  3.  
  4. public class Formulario extends JFrame implements ActionListener {
  5.    
  6.     private JTextField textfield1;
  7.     private JButton boton1, boton2;
  8.     private String cad1 = null, cad2= null;
  9.     public Formulario (){
  10.         setLayout(null);
  11.         textfield1= new JTextField();
  12.         textfield1.setBounds(10, 10, 100, 50);
  13.         add(textfield1);
  14.         boton1= new JButton("+");
  15.         boton1.setBounds(10, 130, 50, 50);
  16.         add(boton1);
  17.         boton2=new JButton ("=");
  18.         boton2.setBounds(120, 130, 50, 50);
  19.         add(boton2);
  20.         boton1.addActionListener(this);
  21.         boton2.addActionListener(this);
  22.     }
  23.    
  24.     public void actionPerformed (ActionEvent e){
  25.        
  26.         if (e.getSource()==boton1){
  27.             cad1= textfield1.getText();
  28.             textfield1.setText(null);
  29.         }
  30.        
  31.         if (e.getSource()==boton2){
  32.             cad2= textfield1.getText();
  33.             int x= Integer.parseInt(cad1);
  34.             int y= Integer.parseInt(cad2);
  35.             int suma= x+y;
  36.             String resultado= String.valueOf(suma);
  37.             textfield1.setText(null);
  38.             textfield1.setText(resultado);
  39.         }  
  40.     }
  41.    
  42.     public static void main (String[]ar){
  43.         Formulario calc= new Formulario();
  44.         calc.setBounds(800, 400, 500, 500);
  45.         calc.setResizable(false);
  46.         calc.setVisible(true);
  47.     }
  48.    
  49. }

Fíjate que tal y como lo tienes, las variables cad1 y cad2 son variables locales al métod actionPerformed, es decir, los valores de las variables desaparecen cuando se termina el método y por eso, al llamar la segunda vez, el valor de cad1 no es el que pusiste antes. Además, inicializas a null ambas variables, así que en ese caso se borrarían los valores que pudiesen tener antes si estos se guardasen.

Saludos.
  #5 (permalink)  
Antiguo 10/11/2011, 18:33
 
Fecha de Ingreso: noviembre-2011
Mensajes: 18
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Mini Calculadora (Suma) - ¿Cómo separar y almacenar los 2 valores a sumar?

Cita:
Iniciado por alexg88 Ver Mensaje
Sólo tienes que poner las variables cad1 y cad 2 como atributos de la clase.

Fíjate que tal y como lo tienes, las variables cad1 y cad2 son variables locales al métod actionPerformed, es decir, los valores de las variables desaparecen cuando se termina el método y por eso, al llamar la segunda vez, el valor de cad1 no es el que pusiste antes. Además, inicializas a null ambas variables, así que en ese caso se borrarían los valores que pudiesen tener antes si estos se guardasen.

Saludos.
Joder, si ya sabía yo que iba a ser una tontería, como no me he dado cuenta...

Muchas gracias. Me has quitado un calentamiento de cabeza. Ahora me toca implementar el resto de operaciones y hacer que se reseten las variables una vez se complete cada operación. Pero esto ya para mañana....jeje

De verdad que muchas gracias a los dos por la ayuda.

Salu2, VanRaidex.
  #6 (permalink)  
Antiguo 12/11/2011, 05:55
 
Fecha de Ingreso: noviembre-2011
Mensajes: 18
Antigüedad: 12 años, 5 meses
Puntos: 1
Pregunta Calculadora mejorada - Dudas

Pues sigo con la calculadora, haciendola un poco más compleja. Ya tengo todos los numeros puestos y funciona de maravilla, pero no sé cómo lo hace. Es decir, no sabía como hacer para que al pulsar un botón númerico escribiera dicho número y al darle al anterior mantuviera el primero y añadiera el segundo. Buscando por internet encontré un código que hacia lo que yo buscaba. EL caso es que funciona, pero no entiendo el código y me gustará saber si alguién de por aqu´ñi puede explicarme lo que hace dicho código. Me interesa porque lo que yo habría echo en 10 if con este código se hace en uno y con dos líneas de código.

Las líneas de código que no entiendo son estas:

Código:
char c = ((JButton) e.getSource()).getText().charAt(0);

if (c >= '0' && c <= '9') {
            textfield1.setText(textfield1.getText() + c);
        }
Os dejo el código para que veaís como voy. Ya sé que el código tiene optimización 0, pero de momento es lo único que sé hacer.

Código Java:
Ver original
  1. import javax.swing.*;
  2.  
  3. import java.awt.event.*;
  4. import java.awt.*;
  5.  
  6. public class Formulario extends JFrame implements ActionListener {
  7.    
  8.     private JTextField textfield1;
  9.     private JLabel label1;
  10.     private JMenuBar m;
  11.     private JMenu menu;
  12.     private JMenuItem acerca, salir;
  13.     private JFrame ventana;
  14.     private JButton boton1, boton2, boton3, boton4, boton5, boton6, boton7, boton8, boton9, boton10, boton11, boton12, boton13, boton14, boton15, boton16;
  15.     private String cad1=null, cad2=null;
  16.     private int operador=0;
  17.     private int x=0, y=0;
  18.        
  19.        
  20.     public Formulario (){
  21.         setLayout(null);
  22.         textfield1= new JTextField();
  23.         textfield1.setBounds(10, 10, 190, 40);
  24.         textfield1.setHorizontalAlignment(JTextField.RIGHT);
  25.         add(textfield1);
  26.         m= new JMenuBar();
  27.         setJMenuBar(m);
  28.         menu= new JMenu("Opciones");
  29.         m.add(menu);
  30.         acerca=new JMenuItem("Acerca de...");
  31.         acerca.addActionListener(this);
  32.         menu.add(acerca);
  33.         salir= new JMenuItem("Salir");
  34.         salir.addActionListener(this);
  35.         menu.add(salir);
  36.         ventana= new JFrame();
  37.         ventana.setBounds(800, 400, 150, 100);
  38.         ventana.setResizable(false);
  39.         label1= new JLabel ("Calculadora. v 1.0");
  40.         boton1= new JButton("1");
  41.         boton1.setBounds(10, 60, 50, 40);
  42.         add(boton1);
  43.         boton2=new JButton ("2");
  44.         boton2.setBounds(60, 60, 50, 40);
  45.         add(boton2);
  46.         boton3= new JButton("3");
  47.         boton3.setBounds(110, 60, 50, 40);
  48.         add(boton3);
  49.         boton4=new JButton ("4");
  50.         boton4.setBounds(10, 100, 50, 40);
  51.         add(boton4);
  52.         boton5=new JButton ("5");
  53.         boton5.setBounds(60, 100, 50, 40);
  54.         add(boton5);
  55.         boton6=new JButton ("6");
  56.         boton6.setBounds(110, 100, 50, 40);
  57.         add(boton6);
  58.         boton7=new JButton ("7");
  59.         boton7.setBounds(10, 140, 50, 40);
  60.         add(boton7);
  61.         boton8=new JButton ("8");
  62.         boton8.setBounds(60, 140, 50, 40);
  63.         add(boton8);
  64.         boton9=new JButton ("9");
  65.         boton9.setBounds(110, 140, 50, 40);
  66.         add(boton9);
  67.         boton10=new JButton ("0");
  68.         boton10.setBounds(160, 140, 50, 40);
  69.         add(boton10);
  70.         boton11=new JButton ("+");
  71.         boton11.setBounds(160, 60, 50, 40);
  72.         add(boton11);
  73.         boton12=new JButton ("-");
  74.         boton12.setBounds(210, 60, 50, 40);
  75.         add(boton12);
  76.         boton13=new JButton ("*");
  77.         boton13.setBounds(160, 100, 50, 40);
  78.         add(boton13);
  79.         boton14=new JButton ("/");
  80.         boton14.setBounds(210, 100, 50, 40);
  81.         add(boton14);
  82.         boton15=new JButton ("C");
  83.         boton15.setBounds(210, 10, 50, 39);
  84.         add(boton15);
  85.         boton16=new JButton ("=");
  86.         boton16.setBounds(210, 140, 50, 40);
  87.         add(boton16);
  88.         boton1.addActionListener(this);
  89.         boton2.addActionListener(this);
  90.         boton3.addActionListener(this);
  91.         boton4.addActionListener(this);
  92.         boton5.addActionListener(this);
  93.         boton6.addActionListener(this);
  94.         boton7.addActionListener(this);
  95.         boton8.addActionListener(this);
  96.         boton9.addActionListener(this);
  97.         boton10.addActionListener(this);
  98.         boton11.addActionListener(this);
  99.         boton12.addActionListener(this);
  100.         boton13.addActionListener(this);
  101.         boton14.addActionListener(this);
  102.         boton15.addActionListener(this);
  103.         boton16.addActionListener(this);
  104.        
  105.     }
  106.    
  107.    
  108.     public void actionPerformed (ActionEvent e){
  109.         char c = ((JButton) e.getSource()).getText().charAt(0);
  110.        
  111.         if(e.getSource()==acerca){
  112.                        
  113.         }
  114.        
  115.         if(e.getSource()==salir){
  116.            
  117.         }
  118.        
  119.         if (c >= '0' && c <= '9') {
  120.             textfield1.setText(textfield1.getText() + c);
  121.         }
  122.        
  123.         if (e.getSource()==boton11){
  124.             cad1= textfield1.getText();
  125.             textfield1.setText(null);
  126.             operador= 1;
  127.            
  128.         }
  129.         if (e.getSource()==boton12){
  130.             cad1= textfield1.getText();
  131.             textfield1.setText(null);
  132.             operador= 2;
  133.            
  134.         }
  135.         if (e.getSource()==boton13){
  136.             cad1= textfield1.getText();
  137.             textfield1.setText(null);
  138.             operador= 3;
  139.            
  140.         }
  141.         if (e.getSource()==boton14){
  142.             cad1= textfield1.getText();
  143.             textfield1.setText(null);
  144.             operador= 4;
  145.            
  146.         }
  147.        
  148.         if (e.getSource()==boton15){
  149.             textfield1.setText(null);
  150.             cad1=null;
  151.             cad2=null;
  152.             x=0;
  153.             y=0;
  154.             operador=0;
  155.            
  156.         }
  157.         if (e.getSource()==boton16){
  158.             cad2= textfield1.getText();
  159.                        
  160.             if (operador==1){
  161.                 x= Integer.parseInt(cad1);
  162.                 y= Integer.parseInt(cad2);
  163.                 int suma= x+y;
  164.                 String resultado= String.valueOf(suma);
  165.                 textfield1.setText(null);
  166.                 textfield1.setText(resultado);
  167.  
  168.             }
  169.             if (operador==2){
  170.                 x= Integer.parseInt(cad1);
  171.                 y= Integer.parseInt(cad2);
  172.                 int resta= x-y;
  173.                 String resultado= String.valueOf(resta);
  174.                 textfield1.setText(null);
  175.                 textfield1.setText(resultado);
  176.  
  177.             }
  178.             if (operador==3){
  179.                 x= Integer.parseInt(cad1);
  180.                 y= Integer.parseInt(cad2);
  181.                 int producto= x*y;
  182.                 String resultado= String.valueOf(producto);
  183.                 textfield1.setText(null);
  184.                 textfield1.setText(resultado);
  185.  
  186.             }
  187.             if (operador==4){
  188.                 x= Integer.parseInt(cad1);
  189.                 y= Integer.parseInt(cad2);
  190.                 if (x>y){
  191.                     float division= x/y;
  192.                     String resultado= String.valueOf(division);
  193.                     textfield1.setText(null);
  194.                     textfield1.setText(resultado);
  195.                 } else {
  196.                     setTitle("La operación no puede realizarse.");
  197.                 }
  198.                
  199.  
  200.             }
  201.             operador=0;
  202.         }
  203.        
  204.        
  205.                                                
  206.     }  
  207.    
  208.     public static void main (String[]ar){
  209.         Formulario calc= new Formulario();
  210.         calc.setBounds(800, 400, 300, 250);
  211.         calc.setResizable(false);
  212.         calc.setVisible(true);
  213.     }
  214.    
  215.    
  216.  
  217. }

También me gustaría saber como configurar el menú, para que al hacer click en el item "Acerca de..." se abra el JFrame "ventana" con el JLabel "label1" o una manera de crear una ventana con texto cuando el usuario haga click en dicha opción. También como puedo hacer que se cierre el programa cuando haga click en "Salir".

Si os fijáis tengo los elementos creados y los dos if dentro del actionPerformed, pero he estado porbando varias cosas y no he conseguido nada, a parte de una pantalla llena de código rojo...XD

Muchas gracias por adelantado.

Salu2, VanRaidex.
  #7 (permalink)  
Antiguo 12/11/2011, 06:50
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Mini Calculadora (Suma) - ¿Cómo separar y almacenar los 2 valores a sumar?

char c = ((JButton) e.getSource()).getText().charAt(0);

if (c >= '0' && c <= '9') {
textfield1.setText(textfield1.getText() + c);
}

Buenas,

Sobre tu primera duda, es muy sencillo lo que hace.

Paso por paso:
  1. (Button)e.getSource() -> Obtiene el componente que originó el evento (tiene que realizar un casting porque getSource() devuelve un objeto de la clase Object).
  2. .getText() -> obtiene la etiqueta del botón (si el botón tiene el texto "1" devuelve "1").
  3. .charAt(0) -> obtiene el primer caracter de la cadena obtenido antes como tipo char. Lo hace para posteriormente mirar si es un caracter entre el '0' y el '9'
  4. Verifica que se trate de un caracter entre el '0' y el '9' y en caso de que sea así significa que se ha pulsado un número y hay que añadirlo.
  5. textfield1.setText(textfield1.getText() + c) -> con textfield1.getText() obtiene la cadena de texto que está escrita en el campo de texto y lo añade al caracter c que has obtenido antes. Después utiliza .setText para poner como texto del campo el obtenido por la concatenación de lo que había antes escrito con el caracter obtenido (que es el del botón presionado).

Para mostrar una ventana con texto puedes usar JOptionPane.showMessageDialog (míralo en el API de Java).

Para cerrar la aplicación utiliza System.exit(0).

[EDITO] Te sugiero también que utilices los LayoutManager de Java y no hacerlo de manera absoluta. Para una calculadora el GridLayout es perfecto.

Te pongo un enlace con explicaciones:http://chuwiki.chuidiang.org/index.p...outs#BoxLayout

También deberías usar arrays para guardar los JButton de los números, además de que saldría de manera muy natural.

Última edición por alexg88; 12/11/2011 a las 06:58
  #8 (permalink)  
Antiguo 12/11/2011, 09:10
 
Fecha de Ingreso: noviembre-2011
Mensajes: 18
Antigüedad: 12 años, 5 meses
Puntos: 1
Pregunta Respuesta: Mini Calculadora (Suma) - ¿Cómo separar y almacenar los 2 valores a sumar?

Cita:
Iniciado por alexg88 Ver Mensaje
char c = ((JButton) e.getSource()).getText().charAt(0);

if (c >= '0' && c <= '9') {
textfield1.setText(textfield1.getText() + c);
}

Buenas,

Sobre tu primera duda, es muy sencillo lo que hace.

Paso por paso:
  1. (Button)e.getSource() -> Obtiene el componente que originó el evento (tiene que realizar un casting porque getSource() devuelve un objeto de la clase Object).
  2. .getText() -> obtiene la etiqueta del botón (si el botón tiene el texto "1" devuelve "1").
  3. .charAt(0) -> obtiene el primer caracter de la cadena obtenido antes como tipo char. Lo hace para posteriormente mirar si es un caracter entre el '0' y el '9'
  4. Verifica que se trate de un caracter entre el '0' y el '9' y en caso de que sea así significa que se ha pulsado un número y hay que añadirlo.
  5. textfield1.setText(textfield1.getText() + c) -> con textfield1.getText() obtiene la cadena de texto que está escrita en el campo de texto y lo añade al caracter c que has obtenido antes. Después utiliza .setText para poner como texto del campo el obtenido por la concatenación de lo que había antes escrito con el caracter obtenido (que es el del botón presionado).

Para mostrar una ventana con texto puedes usar JOptionPane.showMessageDialog (míralo en el API de Java).

Para cerrar la aplicación utiliza System.exit(0).

[EDITO] Te sugiero también que utilices los LayoutManager de Java y no hacerlo de manera absoluta. Para una calculadora el GridLayout es perfecto.

Te pongo un enlace con explicaciones:[url]http://chuwiki.chuidiang.org/index.php?title=Uso_de_Layouts#BoxLayout[/url]

También deberías usar arrays para guardar los JButton de los números, además de que saldría de manera muy natural.

Hola, lo primero te agradezco toda la ayuda y el tiempo dedicado. Ahora ya comienzo con las dudas...jeje

La duda del código ya está resuelta.

He estado trabajando en lo que me has dicho e investigando un poco por ahí y he encontrado un código que funciona a la perfección. El problema es que casi que no lo entiendo en algunas partes. Este es el código:

Código Java:
Ver original
  1. String labelButtons[] = {"7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+"};
  2.         JPanel cp = (JPanel) this.getContentPane();
  3.         cp.setLayout(new BorderLayout());
  4.         JPanel p = new JPanel();
  5.         p.setLayout(new GridLayout(0, 4));
  6.         for (int i = 0; i < labelButtons.length; ++i) {
  7.             JButton boton = new JButton(labelButtons[i]);
  8.             boton.addActionListener(this);
  9.             p.add(boton);
  10.         }
  11.         cp.add(textfield1, BorderLayout.NORTH);
  12.         cp.add(borrar, BorderLayout.AFTER_LAST_LINE);
  13.         cp.add(p, BorderLayout.CENTER);
  14.         this.setSize(300, 300);
  15.         this.setLocationRelativeTo(null);
  16.         this.setVisible(true);

Entiendo que crea un vector con todos los datos de texto de los botones, pero lo que no entiendo es por qué crea dos JPanel... y qué hace esto: JPanel cp = (JPanel) this.getContentPane();

Luego otra duda que me surge al utilizar el BorderLayout es que no puedo ampliar el tamaño del textfield, esto lo establece en el mínimo para ser visto y me parece bien, pero me gustaría poder ampliarlo un poco sin perder la estructura de todo.

Respecto a lo del anterior post. Cuando pongo System.exit(0) me da error. No se sale del programa. Yo creo que tengo algo mal configurado a la hora de interpretar los clicks en el menú.

Lo mismo me pasa con Acerca de..., he puesto lo que me has dicho y también me salta error. He probado con otras alternativas y lo mismo. Por eso pienso que algo del menú lo tengo mal escrito o configurado.

Un saludo y de nuevo, mil gracias.

EDITO:

He estado probando cosas y me he dado cuenta de que si le meto la accion del menú dentro del constructor si funciona sin problemas, es decir he creado una clase interna dentro del addActionListener del botón acerca y ahí he llamado al actionPerformed y he puesto lo que tiene que hacer y funciona perfecto. Con el menú Salir he hecho lo mismo y perfecto.¿Por qué antes no funcionaba y si lo meto dentro del constructor si funciona?

Os dejo el código, todo está escrito dentro del constructor:

Código java:
Ver original
  1. acerca = new JMenuItem( "Acerca de..." );
  2.           menu.add( acerca );
  3.           acerca.addActionListener(
  4.      
  5.              new ActionListener() {
  6.      
  7.                
  8.                 public void actionPerformed( ActionEvent evento ){
  9.                    
  10.                     JOptionPane.showMessageDialog( Formulario.this,
  11.                       "Calculadora creada por Daniel Ruiz Sánchez",
  12.                       "Acerca de", JOptionPane.PLAIN_MESSAGE );
  13.                    
  14.                 }
  15.      
  16.              }  
  17.      
  18.           );
  19.          
  20.          
  21.           salir = new JMenuItem( "Salir" );
  22.           menu.add( salir );
  23.           salir.addActionListener(
  24.      
  25.              new ActionListener() {
  26.      
  27.                
  28.                 public void actionPerformed( ActionEvent evento ){
  29.                    
  30.                     System.exit( 0 );
  31.                 }
  32.      
  33.              }
  34.      
  35.           );

El resto de cosas no he conseguido solucionarlas ni entenderlas.

Última edición por vanraidex; 13/11/2011 a las 05:00
  #9 (permalink)  
Antiguo 14/11/2011, 03:39
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Mini Calculadora (Suma) - ¿Cómo separar y almacenar los 2 valores a sumar?

Buenas,

Lo primero de todo, no sé porque no te funcionaba el menú porque no sé que estarías haciendo dentro del método actionPerformed que tienes dentro de la clase Formulario, pero en principio debería funcionarte igual que con clases internas anónimas (si lo haces bien).

La instrucción this.getContentPane() lo que hace es obtener el panel interno del JFrame (donde se insertan los otros componentes como botones, listas, otros JPanel, ...).

El JPanel que crea aparte es únicamente para introducir los botones de la calculadora. Lo que hace es jugar con los diferentes tipos de layout manager.

Si te fijas, utiliza el BorderLayout como gestor de contenido para el JFrame y luego introduce los componentes: la caja de texto al norte (BorderLayout.NORTH), el JPanel que contiene los botones de la calculadora en el centro (BorderLayout.CENTER) y el botón de borrar al final (BorderLayout.AFTER_LAST_LINE).

Para poner el tamaño del texto más grande puedes usar setMinimumSize (declaras el tamaño mínimo que debe tener) o setSize (el tamaño que va a tener siempre).

Saludos.
  #10 (permalink)  
Antiguo 14/11/2011, 05:34
 
Fecha de Ingreso: noviembre-2011
Mensajes: 18
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Mini Calculadora (Suma) - ¿Cómo separar y almacenar los 2 valores a sumar?

Cita:
Iniciado por alexg88 Ver Mensaje
Buenas,

Lo primero de todo, no sé porque no te funcionaba el menú porque no sé que estarías haciendo dentro del método actionPerformed que tienes dentro de la clase Formulario, pero en principio debería funcionarte igual que con clases internas anónimas (si lo haces bien).

La instrucción this.getContentPane() lo que hace es obtener el panel interno del JFrame (donde se insertan los otros componentes como botones, listas, otros JPanel, ...).

El JPanel que crea aparte es únicamente para introducir los botones de la calculadora. Lo que hace es jugar con los diferentes tipos de layout manager.

Si te fijas, utiliza el BorderLayout como gestor de contenido para el JFrame y luego introduce los componentes: la caja de texto al norte (BorderLayout.NORTH), el JPanel que contiene los botones de la calculadora en el centro (BorderLayout.CENTER) y el botón de borrar al final (BorderLayout.AFTER_LAST_LINE).

Para poner el tamaño del texto más grande puedes usar setMinimumSize (declaras el tamaño mínimo que debe tener) o setSize (el tamaño que va a tener siempre).

Saludos.
Hola,

Muchas gracias por la respuesta.

Pue sla verdad es que no lo entiendo porque realmente tenía puesto lo mismo en el actionPerformed del anterior código, pero bueno...

Ok, ya entiendo lo de los dos paneles.

El tema del tamaño del cuadro de texto e squ eya tengo puesto el setSize pero el tamaño no cambia y al poner el setMinimumSize me pide un JDimension, ¿como puedo ajustar eso?

Veo que tu entiendes bastante de esto y me gustaría pedirte consejo. ¿Hay algún tutorial o curso o libro que me recomiendes para aprender? Cuanto más práctico mejor, porque yo necesito ver resultados para no desanimarme pronto, es decir, cuando empece con las variables y con los estructuras condicionales, es un poco rollo, pero cuando empecé con las interfaces gráficas no me cuesta ponerme a estudiar durante horas. El curso o libro, cuanto más desarrollado este al desarrollo de aplicacione socn interfaz gráfica o a juegos mucho mejor.

Muchas gracias por adelantado.

Salu2, VanRaidex.
  #11 (permalink)  
Antiguo 14/11/2011, 06:04
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Mini Calculadora (Suma) - ¿Cómo separar y almacenar los 2 valores a sumar?

Buenas,

El Dimensión es tan sencillo como poner:

Código Java:
Ver original
  1. componente.setMinimumSize(new Dimension(100,30));

Así especificas una anchura de 100 y una altura de 30.

Sobre tutoriales o libros, te recomiendo como libro Como programar en Java de Deitel, que te va introducción poco a poco en el desarrollo de interfaces gráficas.

También hay tutoriales como "Aprenda Java como si estuviera en primero", que está muy bien pero que en el tema de interfaz habla de awt (no de Swing) y es un poco antiguo.

Pero lo importante antes de nada es tener una buena base en el lenguaje y por mucho que te aburra tienes que estudiar desde 0 si no lo conoces.

Cualquier duda puedes preguntarme.
  #12 (permalink)  
Antiguo 18/11/2011, 02:33
 
Fecha de Ingreso: noviembre-2011
Mensajes: 18
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Mini Calculadora (Suma) - ¿Cómo separar y almacenar los 2 valores a sumar?

Cita:
Iniciado por alexg88 Ver Mensaje
Buenas,

El Dimensión es tan sencillo como poner:

Código Java:
Ver original
  1. componente.setMinimumSize(new Dimension(100,30));

Así especificas una anchura de 100 y una altura de 30.

Sobre tutoriales o libros, te recomiendo como libro Como programar en Java de Deitel, que te va introducción poco a poco en el desarrollo de interfaces gráficas.

También hay tutoriales como [URL="http://www.tecnun.es/asignaturas/Informat1/AyudaInf/aprendainf/Java/Java2.pdf"]"Aprenda Java como si estuviera en primero"[/URL], que está muy bien pero que en el tema de interfaz habla de awt (no de Swing) y es un poco antiguo.

Pero lo importante antes de nada es tener una buena base en el lenguaje y por mucho que te aburra tienes que estudiar desde 0 si no lo conoces.

Cualquier duda puedes preguntarme.
Hola,

Perdona que haya tardado en contestar, pero he estado muy liado con el trabajo. Pues muchas gracias por la información y por la ayuda. Voy a ver si encuentro el libro que me dices. También me he apuntado a un curso de desarrollo de aplicaciones para móviles, por lo que espero que ahí obtenga la base que necesito. De nuevo te agadezco toda la ayuda.

Salu2,VanRaidex.

Etiquetas: calculadora
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 02:08.