38. La Calculadora

Vamos a escribir nuestro primer programa sencillo. Este tratara de una calculadora no muy sofisticada, pero que sera el inicio de empezar a crear algun programita un poco mas elaborado. En vez de disponer un boton para cada numero y un boton para cada signo de operacion, de momento, crearemos una calculadora que conlleve un boton de "Calcular", un boton de "Revertir" y un boton de "Restaurar".

¿Que significan estos botones?

 

Boton Calcular: Sera con el que hagamos las operaciones.

Boton Revertir: Este nos cambiara la posicion de unos numeros.

Boton Restaurar: Y este dejara en blanco todos los campos.

 

Podrias copiar y pegar el codigo en tu IDE y asi ahorrarte el escribir el codigo, sin embargo, mi consejo y experiencia, es que escribas el codigo y vayas intentando descubrir que es lo que estas haciendo realmente.

Todo lo que hemos dado esta en este codigo, solo te encontraras algun metodo nuevo como es "valueOf", es tan simple como convertir a texto.

Tambien veras el metodo "paintComponents(getGraphics())" , lo que hace es refrescar los graficos que hay en la ventana para que aparezcan todos.

Fijate, aunque escribas numeros dentro de los JTextField, Java considera que estas escribiendo texto, por tanto, para hacer las operaciones de calcular tendras que estar haciendo conversiones a enteros o decimales (en nuestro caso a decimales "Double"), y luego volverlo a convertir a texto.

 

Con respecto al boton "Revertir", su funcion exactamente es la siguiente:

Si pones un numero en el campo cmpNum1 mas bajo que en el campo cmpNum2, este te dara un numero negativo, es decir, si restamos 25 - 35 el resultado sera -10, un numero negativo. Este boton lo que hara sera cambiar las posiciones de los numeros para que el numero mas bajo este siempre en el campo cmpNum2.

 

Sin mas rodeos, aqui esta el codigo:

 

import javax.swing.*;
import java.awt.event.*;
 
public class Calculadora extends JFrame implements ActionListener{
 
    JTextField cmpNum1, cmpNum2, cmpSumar, cmpRestar, cmpMult, cmpDiv;
    JButton btnCalcular, btnRevertir, btnRestaurar;
 
    public Calculadora(){
        this("Calculadora",10,10,300,350);
    }
 
    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);
 
        JLabel lblNum1 = new JLabel("Numero>>");
            lblNum1.setBounds(20,20,80,20);
            this.getContentPane().add(lblNum1);
        cmpNum1 = new JTextField();
            cmpNum1.setBounds(100,20,150,20);
            this.getContentPane().add(cmpNum1);
        JLabel lblNum2 = new JLabel("Numero>>");
            lblNum2.setBounds(20,50,80,20);
            this.getContentPane().add(lblNum2);
        cmpNum2 = new JTextField();
            cmpNum2.setBounds(100,50,150,20);
            this.getContentPane().add(cmpNum2);
 
        btnRevertir = new JButton("Revertir");
            btnRevertir.setBounds(20,80,80,30);
            this.getContentPane().add(btnRevertir);
        btnCalcular = new JButton("Calcular");
            btnCalcular.setBounds(120,80,100,30);
            this.getContentPane().add(btnCalcular);
        btnRestaurar = new JButton("Restaurar");
            btnRestaurar.setBounds(100,250,100,30);
            this.getContentPane().add(btnRestaurar);
 
        JLabel lblSumar = new JLabel("Sumar");
            lblSumar.setBounds(20,130,80,20);
            this.getContentPane().add(lblSumar);
        cmpSumar = new JTextField();
            cmpSumar.setBounds(100,130,150,20);
            this.getContentPane().add(cmpSumar);
        JLabel lblRestar = new JLabel("Restar");
            lblRestar.setBounds(20,160,80,20);
            this.getContentPane().add(lblRestar);
        cmpRestar = new JTextField();
            cmpRestar.setBounds(100,160,150,20);
            this.getContentPane().add(cmpRestar);
        JLabel lblMult = new JLabel("Multiplicar");
            lblMult.setBounds(20,190,80,20);
            this.getContentPane().add(lblMult);
        cmpMult = new JTextField();
            cmpMult.setBounds(100,190,150,20);
            this.getContentPane().add(cmpMult);
        JLabel lblDiv = new JLabel("Dividir");
            lblDiv.setBounds(20,220,80,20);
            this.getContentPane().add(lblDiv);
        cmpDiv = new JTextField();
            cmpDiv.setBounds(100,220,150,20);
            this.getContentPane().add(cmpDiv);
 
        btnRevertir.addActionListener(this);
        btnCalcular.addActionListener(this);
        btnRestaurar.addActionListener(this);
 
        paintComponents(getGraphics());
 
    }
 
    public void actionPerformed(ActionEvent event){
        if(event.getSource()==btnCalcular){
            Double num1, num2, sumar, restar, multiplicar, dividir;
            num1 = Double.parseDouble(cmpNum1.getText());
            num2 = Double.parseDouble(cmpNum2.getText());
            sumar = num1+num2;
            restar = num1-num2;
            multiplicar = num1*num2;
            dividir = num1/num2;
            cmpSumar.setText(String.valueOf(sumar));
            cmpRestar.setText(String.valueOf(restar));
            cmpMult.setText(String.valueOf(multiplicar));
            cmpDiv.setText(String.valueOf(dividir));
        }
        if(event.getSource()==btnRevertir){
            Double numero1 = Double.parseDouble(cmpNum1.getText());
            Double numero2 = Double.parseDouble(cmpNum2.getText());
            if(numero1<numero2){
                cmpNum1.setText(String.valueOf(numero2));
                cmpNum2.setText(String.valueOf(numero1));
            }
        }
        if(event.getSource()==btnRestaurar){
            cmpNum1.setText("");
            cmpNum2.setText("");
            cmpSumar.setText("");
            cmpRestar.setText("");
            cmpMult.setText("");
            cmpDiv.setText("");
        }
    }
 
    public static void main(String[]args){
 
        Calculadora calc = new Calculadora();
 
    }
 
}
 
 
Fijate bien en el metodo de los botones y veras que se pueden crear variables nuevas donde las puedo utilizar a mi conveniencia y poder extraer lo que hay en los JTextField y las conversiones a numero y luego a texto, y a la inversa.