43. La calculadora 2

Nos estamos acercando al final del Mini-Curso Java, y solo con todo lo que hemos dado en los temas anteriores, ya podemos crear aplicaciones algo mas complejas, de hecho, lo vamos a ver a continuacion en el ejercicio siguiente.

En este tema, vamos a crear la calculadora otra vez, pero en este caso, la haremos un poco mas parecida a una calculadora normal y un poco mas trabajada.

Todo el codigo que veras a continuacion, lo has aprendido en los temas anteriores. A exception de algunos metodos, que los aprenderas enseguida y entenderas para que sirven. De todas formas, he puesto comentarios por todo el codigo para que no te pierdas.

 

La Calculadora2

 

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
public class Calculadora extends JFrame implements ActionListener{
 
    JTextField cmpResultado;
    JButton btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9,btn0;
    JButton btnSumar,btnRestar,btnMult,btnDiv,btnPunto,btnSigno,btnCe,btnC,btnTotal;
    JLabel lblSigno;
 
    String memoria1;    //Guarda el valor inicial
    String memoria2;    //Guarda el valor posterior
    String signo;       //Guarda el valor del signo
 
    public Calculadora(){
        this("Calculadora 2",100,100,280,315);
    }
 
    public Calculadora(String titulo, int x, int y, int w, int h){
        super(titulo);
        this.getContentPane().setLayout(null);
        this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        this.setBounds(x,y,w,h);
        this.setVisible(true);
 
        // Creo campo visual para los numeros
        cmpResultado = new JTextField();
            cmpResultado.setBounds(6,6,150,28);
            cmpResultado.setBackground(Color.white);    //Le pongo un color al fondo
            cmpResultado.setHorizontalAlignment(SwingConstants.RIGHT);  //Alineo a la derecha
            cmpResultado.setEditable(false);    //El campo no es editable
            this.getContentPane().add(cmpResultado);
 
        // Creo botones de numeracion
        btn1 = new JButton("1");
            btn1.setBounds(6,46,42,42);
            this.getContentPane().add(btn1);
        btn2 = new JButton("2");
            btn2.setBounds(60,46,42,42);
            this.getContentPane().add(btn2);
        btn3 = new JButton("3");
            btn3.setBounds(114,46,42,42);
            this.getContentPane().add(btn3);
        btn4 = new JButton("4");
            btn4.setBounds(6,100,42,42);
            this.getContentPane().add(btn4);
        btn5 = new JButton("5");
            btn5.setBounds(60,100,42,42);
            this.getContentPane().add(btn5);
        btn6 = new JButton("6");
            btn6.setBounds(114,100,42,42);
            this.getContentPane().add(btn6);
        btn7 = new JButton("7");
            btn7.setBounds(6,154,42,42);
            this.getContentPane().add(btn7);
        btn8 = new JButton("8");
            btn8.setBounds(60,154,42,42);
            this.getContentPane().add(btn8);
        btn9 = new JButton("9");
            btn9.setBounds(114,154,42,42);
            this.getContentPane().add(btn9);
        btn0 = new JButton("0");
            btn0.setBounds(60,208,42,42);
            this.getContentPane().add(btn0);
 
        // Creo botones adicionales
        btnPunto = new JButton(".");
            btnPunto.setBounds(6,208,42,42);
            btnPunto.setBackground(Color.lightGray);
            this.getContentPane().add(btnPunto);
        btnSigno = new JButton("+/-");
            btnSigno.setBounds(110,208,48,42);
            btnSigno.setBackground(Color.lightGray);
            this.getContentPane().add(btnSigno);
 
        lblSigno = new JLabel();
            lblSigno.setBounds(168,6,100,20);
            this.getContentPane().add(lblSigno);
 
        // Creo botones de operaciones
        btnSumar = new JButton("+");
            btnSumar.setBounds(168,46,42,42);
            btnSumar.setBackground(Color.lightGray);
            btnSumar.setForeground(Color.white);    // Pongo color al texto
            this.getContentPane().add(btnSumar);
        btnRestar = new JButton("-");
            btnRestar.setBounds(168,100,42,42);
            btnRestar.setBackground(Color.lightGray);
            btnRestar.setForeground(Color.white);
            this.getContentPane().add(btnRestar);
        btnMult = new JButton("x");
            btnMult.setBounds(168,154,42,42);
            btnMult.setBackground(Color.lightGray);
            btnMult.setForeground(Color.white);
            this.getContentPane().add(btnMult);
        btnDiv = new JButton("/");
            btnDiv.setBounds(168,208,42,42);
            btnDiv.setBackground(Color.lightGray);
            btnDiv.setForeground(Color.white);
            this.getContentPane().add(btnDiv);
 
        // Creo botones de resultados
        btnC = new JButton("C");
            btnC.setBounds(216,46,42,42);
            btnC.setBackground(Color.green);
            btnC.setForeground(Color.white);
            this.getContentPane().add(btnC);
        btnCe = new JButton("B");
            btnCe.setBounds(216,100,42,42);
            btnCe.setBackground(Color.red);
            btnCe.setForeground(Color.white);
            this.getContentPane().add(btnCe);
        btnTotal = new JButton("=");
            btnTotal.setBounds(216,154,42,96);
            btnTotal.setBackground(Color.orange);
            this.getContentPane().add(btnTotal);
 
            // Creo las llamadas a los botones
            btn1.addActionListener((this));
            btn2.addActionListener((this));
            btn3.addActionListener((this));
            btn4.addActionListener((this));
            btn5.addActionListener((this));
            btn6.addActionListener((this));
            btn7.addActionListener((this));
            btn8.addActionListener((this));
            btn9.addActionListener((this));
            btn0.addActionListener((this));
 
            btnPunto.addActionListener((this));
            btnSigno.addActionListener((this));
 
            btnSumar.addActionListener((this));
            btnRestar.addActionListener((this));
            btnMult.addActionListener((this));
            btnDiv.addActionListener((this));
 
            btnC.addActionListener((this));
            btnCe.addActionListener((this));
            btnTotal.addActionListener((this));
 
        paintComponents(getGraphics());
 
    }
 
 
    public void actionPerformed(ActionEvent event){
        // BOTONES CON NUMEROS
        if(event.getSource()==btn1){cmpResultado.setText(cmpResultado.getText()+"1");}
        if(event.getSource()==btn2){cmpResultado.setText(cmpResultado.getText()+"2");}
        if(event.getSource()==btn3){cmpResultado.setText(cmpResultado.getText()+"3");}
        if(event.getSource()==btn4){cmpResultado.setText(cmpResultado.getText()+"4");}
        if(event.getSource()==btn5){cmpResultado.setText(cmpResultado.getText()+"5");}
        if(event.getSource()==btn6){cmpResultado.setText(cmpResultado.getText()+"6");}
        if(event.getSource()==btn7){cmpResultado.setText(cmpResultado.getText()+"7");}
        if(event.getSource()==btn8){cmpResultado.setText(cmpResultado.getText()+"8");}
        if(event.getSource()==btn9){cmpResultado.setText(cmpResultado.getText()+"9");}
        if(event.getSource()==btn0){cmpResultado.setText(cmpResultado.getText()+"0");}
 
        // BOTON PUNTO
        if(event.getSource()==btnPunto){
            // Si el campo no esta vacio... // Agregar lo que hay en pantalla mas un punto
            if(!cmpResultado.equals("")){cmpResultado.setText(cmpResultado.getText()+".");}
        }
 
        // BOTON SIGNO
        if(event.getSource()==btnSigno){
            // Creo dos variables
            Double num;
            String resultado = cmpResultado.getText(); //En resultado guardo lo que hay en pantalla
            if(resultado.length()>0){ // Si en la pantalla hay algo escrito...
                num = (-1)*Double.parseDouble(resultado);   //A num le paso el resultado a negativo
                cmpResultado.setText(num.toString());   // num lo paso a String
            }
        }
 
        // BOTONES DE OPERACIONES
        if(event.getSource()==btnSumar){
            // Boton sumar // Si el campo no esta vacio...
            if(!cmpResultado.getText().equals("")){
                memoria1 = cmpResultado.getText();  //Guardar en memoria1 el valor de campoResultado
                signo = "+";    //Le guardamos el signo +
                cmpResultado.setText("");   //Borramos pantalla
                lblSigno.setText("+");  // Asigno el simbolo
            }
        }
        if(event.getSource()==btnRestar){
            // Boton restar // Si el campo no esta vacio...
            if(!cmpResultado.getText().equals("")){
                memoria1 = cmpResultado.getText();  //Guardar en memoria1 el valor de campoResultado
                signo = "-";    //Le guardamos el signo -
                cmpResultado.setText("");   //Borramos pantalla
                lblSigno.setText("-");  // Asigno el simbolo
            }
        }
        if(event.getSource()==btnMult){
            // Boton multiplicar // Si el campo no esta vacio...
            if(!cmpResultado.getText().equals("")){
                memoria1 = cmpResultado.getText();  //Guardar en memoria1 el valor de campoResultado
                signo = "x";    //Le guardamos el signo x
                cmpResultado.setText("");   //Borramos pantalla
                lblSigno.setText("x");  // Asigno el simbolo
            }
        }
        if(event.getSource()==btnDiv){
            // Boton dividir // Si el campo no esta vacio...
            if(!cmpResultado.getText().equals("")){
                memoria1 = cmpResultado.getText();  //Guardar en memoria1 el valor de campoResultado
                signo = "/";    //Le guardamos el signo /
                cmpResultado.setText("");   //Borramos pantalla
                lblSigno.setText("/");  // Asigno el simbolo
            }
        }
 
 
        // BOTON BORRAR CARACTER
        if(event.getSource()==btnC){
            // Creo una variable
            String resultado = cmpResultado.getText();  //Guardo lo que hay en pantalla
            // Si en resultado hay algo...
            if(resultado.length()>0){
                resultado = resultado.substring(0, resultado.length()-1); //Al resultado desde el indice 0 substraigo 1 caracter
                cmpResultado.setText(resultado);    // Poner en el campo el resultado de resultado
            }
        }
 
        // BOTON BORRAR TODA LA PANTALLA
        if(event.getSource()==btnCe){cmpResultado.setText(null); lblSigno.setText("");}
 
        // BOTON TOTAL
        if(event.getSource()==btnTotal){
            // Creo dos variables
            Double total = 0.0;
            String resultado;
            memoria2 = cmpResultado.getText();  // Almaceno lo que hay en pantalla
 
            // Si en memoria2 hay algo...
            if(!memoria2.equals("")){
                lblSigno.setText("=");
                // y si el signo es igual a +
                if(signo.equals("+")){
                    // El total es lo que hay en memoria1 + lo que hay ahora en memoria2
                    total = Double.parseDouble(memoria1)+Double.parseDouble(memoria2);
                }
                // y si el signo es igual a -
                if(signo.equals("-")){
                    // El total es lo que hay en memoria1 - lo que hay ahora en memoria2
                    total = Double.parseDouble(memoria1)-Double.parseDouble(memoria2);
                }
                // y si el signo es igual a x
                if(signo.equals("x")){
                    // El total es lo que hay en memoria1 x lo que hay ahora en memoria2
                    total = Double.parseDouble(memoria1)*Double.parseDouble(memoria2);
                }
                // y si el signo es igual a /
                if(signo.equals("/")){
                    // El total es lo que hay en memoria1 / lo que hay ahora en memoria2
                    total = Double.parseDouble(memoria1)/Double.parseDouble(memoria2);
                }
 
                resultado = total.toString();
                cmpResultado.setText(resultado);
            }
        }
    }
 
    public static void main(String[]args){
 
        Calculadora calc = new Calculadora();
 
    }
 
}

 

En el siguiente tema, veremos el tema de los ficheros, donde podremos guardar datos que podremos recuperar despues.

Contacto

ProgramandoJava cabillo@hotmail.es