Necesito ayuda para mi Calculadora (usando la libreria Swing)

Iniciado por DarkSorcerer, 31 Enero 2013, 09:24 AM

0 Miembros y 1 Visitante están viendo este tema.

DarkSorcerer

Me anime a programar una calculadora sencilla, se trata de 2 campos de textos donde se ingresa el numero, abajo hay 5 botones, hay para sumar, restar, multiplicar y dividir, mas un boton adicional para borrar todo, los resultados de las operaciones se muestra en un campo inmodificable, pero mi problema es que para que pueda guardar los numeros a operar, hay que apretar el boton Enter  y lo que yo busco es que cuando el usuario escribe el numero en los campos, no tenga que acudir al enter, solo es llegar y escribir los numeros y clickear el boton de la operacion deseada.

Yo estoy leyendo el libro de Deitel 7ma edicion si es que alguien lo leyo para que me pueda ayudar y les dejo mi codigo, yo programé una clase que se llama Calculadora y que hereda todo de JFrame. Por si acaso, estoy usando el Netbeans 7.2


Les dejo la clase calculadora


package ejercicio109;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Calculadora extends JFrame {
   
    private JLabel etiqueta1;
    private JLabel etiqueta2;
    private JLabel etiqueta3;
   
    private JTextField campo1;
    private JTextField campo2;
    private JTextField campo3;
   
    private JButton botonSuma;
    private JButton botonResta;
    private JButton botonProducto;
    private JButton botonDivision;
    private JButton botonBorrar;
   
    private int numero1;
    private int numero2;
    private int resultado;
   
    public Calculadora(){
       
        super("CALCULADORA SIMPLE");
        setLayout(new FlowLayout());
       
        etiqueta1 = new JLabel("Numero 1");
        etiqueta2 = new JLabel("Numero 2");
        etiqueta3 = new JLabel("Resultado");
       
        campo1 = new JTextField(10);
        campo2 = new JTextField(10);
        campo3 = new JTextField(10);
        campo3.setEditable(false);
       
        botonSuma = new JButton("Sumar");
        botonResta = new JButton("Restar");
        botonProducto = new JButton("Multiplicar");
        botonDivision = new JButton("Dividir");
        botonBorrar = new JButton("Borrar");
       
        add(etiqueta1);
        add(campo1);
       
        add(etiqueta2);
        add(campo2);
       
        add(etiqueta3);
        add(campo3);
       
        add(botonSuma);
        add(botonResta);
        add(botonProducto);
        add(botonDivision);
        add(botonBorrar);
       
        numero1 = 0;
        numero2 = 0;
       
        AdministradorEventos administrador = new AdministradorEventos();
       
        campo1.addActionListener(administrador);
        campo2.addActionListener(administrador);
       
        botonSuma.addActionListener(administrador);
        botonResta.addActionListener(administrador);
        botonProducto.addActionListener(administrador);
        botonDivision.addActionListener(administrador);
        botonBorrar.addActionListener(administrador);

    }
   
    private class AdministradorEventos implements ActionListener {
       
        public void actionPerformed(ActionEvent evento){
           
            if(evento.getSource() == campo1){
               
                numero1 = Integer.parseInt(evento.getActionCommand());
               
            }
           
            if(evento.getSource() == campo2){
               
                numero2 = Integer.parseInt(evento.getActionCommand());
               
            }
           
            if(evento.getSource() == botonSuma){
               
                resultado = numero1 + numero2;
                campo3.setText(Integer.toString(resultado));
               
            }
           
            if(evento.getSource() == botonResta){
               
                resultado = numero1 - numero2;
                campo3.setText(Integer.toString(resultado));
               
            }
           
            if(evento.getSource() == botonProducto){
               
                resultado = numero1 * numero2;
                campo3.setText(Integer.toString(resultado));
               
            }
           
            if(evento.getSource() == botonDivision){
               
                resultado = numero1 / numero2;
                campo3.setText(Integer.toString(resultado));
               
            }
           
            if(evento.getSource() == botonBorrar){
               
                numero1 = 0;
                numero2 = 0;
                resultado = 0;
               
                campo1.setText("");
                campo2.setText("");
                campo3.setText("");
               
            }
           
        }
       
    }
   
   
}


Y ahora les dejo el programa principal

package ejercicio109;

public class Ejercicio109 {

    public static void main(String[] args) {
       
        Calculadora calculadora = new Calculadora();
       
        calculadora.setSize(600,100);
        calculadora.setResizable(false);
        calculadora.setDefaultCloseOperation(Calculadora.EXIT_ON_CLOSE);
        calculadora.setVisible(true);
       
    }
}



ThinkByYourself

#1
Entonces el ActionListener lo tendrías que implementar en el botón de la operación. ¿No? Vale, perdón... xD  ¿Y no te funciona? Es que yo creo que tengo un problema muy parecido...
No te voy a engañar.
Todos hemos sido programados para normalizar la psicopatía de las élites económicas y políticas, y para realimentar su patrón de ciega codicia.

Slider324

#2
este codigo:

if(evento.getSource() == campo1){
             
               numero1 = Integer.parseInt(evento.getActionCommand());
             
           }
         
           if(evento.getSource() == campo2){
             
               numero2 = Integer.parseInt(evento.getActionCommand());
             
           }

          if(evento.getSource() == botonSuma){
             
               resultado = numero1 + numero2;
               campo3.setText(Integer.toString(resultado));
             
           }





Lo puedes hacer de esta forma;


if(evento.getSource() == botonSuma){
             
               numero1 = Integer.parseInt(campo1.getText());
               numero2 = Integer.parseInt(campo2.getText());
               resultado = numero1 + numero2;
               campo3.setText(Integer.toString(resultado));
             
           }



Y de esa manera no necesitas presionar enter toda la funcion se hara al precionar el boton sumar, bueno aqui te dejo una que hice para que puedas ver un ejemplo:



//Librerias
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

//Inicia Nuestra Clase Ventana
public class Calculadora extends JFrame implements ActionListener{

   //Objetos de Nuestra Ventana
   public int num1, num2;
   public JLabel result, digito1, digito2;
   public JButton sumar, restar, dividir, multi, limpiar;
   public JTextField val1, val2, res;
   
   
   //Nuestro Constrcutor de Calculadora
   public Calculadora(){
       
       //Titulo Tamaño etc..
       setTitle("Calculadora Demo");
       setLayout(new FlowLayout());
       setSize(580,100);
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       setResizable(false);
                       
       //Cargamos Objetos
       Obtejos();
                     
       //Para Centrar Ventana
       setLocationRelativeTo(null);
               
   }//Termina Metodo Ventana
   
   
   //Metodo Objetos
   private void Obtejos(){
               
       //Instanciamos Labels
       digito1 = new JLabel("Numero1: ");
       digito2 = new JLabel("Numero2: ");
       result = new JLabel("Resultado: ");
       
       
       //Instanciamos TextArea
       val1 = new JTextField(10);
       val2 = new JTextField(10);
       res = new JTextField(10);
       res.setEditable(false);
       
       
       //Instanciamos Botones
       sumar = new JButton("+");
       sumar.setToolTipText("Sumar");
       
       restar = new JButton("-");
       restar.setToolTipText("Restar:");
       
       dividir = new JButton("/");
       dividir.setToolTipText("Dividir");
       
       multi = new JButton("*");
       multi.setToolTipText("Multiplicar");
       
       limpiar = new JButton("C");
       limpiar.setToolTipText("Reiniciar Campos");
       
             
       //Agregamos A nuestra Ventana Nuestros Objetos                    
       this.add(digito1);
       this.add(val1);
       
       this.add(digito2);
       this.add(val2);
       
       this.add(result);
       this.add(res);
               
       this.add(sumar);
       this.add(restar);
       this.add(dividir);
       this.add(multi);
       this.add(limpiar);  
                     
               
       //Escuchamos Botones
       sumar.addActionListener(this);
       restar.addActionListener(this);
       dividir.addActionListener(this);
       multi.addActionListener(this);
       limpiar.addActionListener(this);
   
   
   }//Termina nuestro Metodo Objetos

   
   //Definimos la Funciones de cada Botons
   @Override
   public void actionPerformed(ActionEvent e) {
       
       if(val1.getText().length() == 0){
           JOptionPane.showMessageDialog(null, "Inserta Un valor en el Area 1", "Error", JOptionPane.ERROR_MESSAGE);
       }else if(val2.getText().length() == 0){
           JOptionPane.showMessageDialog(null, "Inserta Un valor en el Area 2", "Error", JOptionPane.ERROR_MESSAGE);        
       }
       
       //si Presionan Sumar entonces
       else if(e.getSource() == sumar && val1.getText().length() != 0 && val2.getText().length() != 0){
           num1 = Integer.parseInt(val1.getText());
           num2 = Integer.parseInt(val2.getText());
           int resultado;
                       
           resultado = num1+num2;
           
           res.setText(Integer.toString(resultado));            
       }
       
       
       //si Presionan Restar entonces
       else if(e.getSource() == restar && val1.getText().length() != 0 && val2.getText().length() != 0){
           num1 = Integer.parseInt(val1.getText());
           num2 = Integer.parseInt(val2.getText());
           int resultado;
           
           resultado = num1-num2;
           
           res.setText(Integer.toString(resultado));  
       }
       
       
       //si Presionan dividir entonces
       else if(e.getSource() == dividir && val1.getText().length() != 0 && val2.getText().length() != 0){
           num1 = Integer.parseInt(val1.getText());
           num2 = Integer.parseInt(val2.getText());
           float resultado;
           
           resultado = num1/num2;
           
           res.setText(String.valueOf(resultado));
       }
       
       
       //si Presionan multiplicar entonces
       else if(e.getSource() == multi && val1.getText().length() != 0 && val2.getText().length() != 0){
           num1 = Integer.parseInt(val1.getText());
           num2 = Integer.parseInt(val2.getText());
           int resultado;
           
           resultado = num1*num2;
           
           res.setText(Integer.toString(resultado));
       }
       
       
       //si Presionan Limpiar entonces
       else if(e.getSource() == limpiar && val1.getText().length() != 0 && val2.getText().length() != 0){
           num1 = 0;
           num2 = 0;
           val1.setText("");
           val2.setText("");
           res.setText("");
       }
       
       
   }//Terminamos de Definir acciones
   
       
   
}//Termina nuestra clase Ventana



DarkSorcerer

#3
Muchas gracias, me sirvió tu ayuda, ahora me funciona como yo lo quería  ;-)

Aunque tuve un pequeño problema en el boton de la division, no me arrojaba decimales, a si que lo modifique de tal manera que mostrara


Lo hice asi

 if(evento.getSource() == botonDivision){

               numero1 = Integer.parseInt(campo1.getText());
               numero2 = Integer.parseInt(campo2.getText());
               double resultado = (double)numero1/(double)numero2;
               
               campoResultado.setText(String.format("%.3f", resultado));
               
           }

De todas maneras, muchas gracias por la ayuda, me fue muy util

Ahora mi proximo objetivo es programar una calculadora pero esta vez usando botones  ;D