Calculadora con Interfaz en Java
Categorías: Java

☕ Calculadora Con Interfaz En Java

Anteriormente he compartido un ejemplo de una calculadora básica usando los cuadros de dialogo en java, la cual es un poco tediosa al momento de realizar las operaciones, pero en post mostrare algo mas grafico, usando lo que se ha explicado en las anteriores entradas: Crear ventanas, Botones, Formularios básicos, JPaneles y arreglos de botones.

El proyecto esta dividido en dos partes, una el cual contiene el método principal, y la otra clase contiene la interfaz, eventos y operaciones realizadas por el ejercicio practico. El programilla realiza las cuatro operaciones básicas de las matemáticas (suma, resta, multiplicación y división), ademas cuenta con el uso de memorias, borrado total (pantalla y memoria) raíz cuadrada, y manejo de decimales. Bueno ya sabiendo que realiza el ejercicio, continuare mostrando el código para la aplicación.

 

Descargar Código Fuente

Desbloquea el contenido con una acción social...

Comparte este articulo y obtén el contenido premium!

Facebook
Twitter
Linkedin0
+ CLASE MAIN...
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class CalculadoraGUI {

    public static void main(String[] args) {
         String ax = System.getProperty("os.name"); //variable que toma el nombre del sistema operativo que se tenga instalado

        if(ax.equals("Windows 7") || ax.equals("Windows")){//si es un sistema windows se aplica el skin que tiene java para windows
            try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
            interfaz w = new interfaz();
            // TODO code application logic here
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(interfaz.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                Logger.getLogger(interfaz.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(interfaz.class.getName()).log(Level.SEVERE, null, ex);
            } catch (UnsupportedLookAndFeelException ex) {
                Logger.getLogger(interfaz.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        if(ax.equals("Linux")){//si es un sistema linux se aplica el skin que tiene java para linux
            try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
            interfaz w = new interfaz();
                // TODO code application logic here
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(interfaz.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                Logger.getLogger(interfaz.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(interfaz.class.getName()).log(Level.SEVERE, null, ex);
            } catch (UnsupportedLookAndFeelException ex) {
                Logger.getLogger(interfaz.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}

 

+ CLASE INTERFAZ...
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Insets;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class interfaz implements ActionListener{
    
    JTextField jt1, jt2;
    Panel pN, pb1, pb3;
    JPanel pS, pb2;
    JButton mc, mr, ms, mMas, mMenos, numeros[], operaciones[];
    String oper[]={"R", "C", "+", "/", "-" ,"*", "="},  ax="";
    float n1, n2, nr, M;//variables para las operaciones
    int tipOp; //para controlar el tipo de operacion que se realiza
    boolean t=false;//control sobre escribir un nuevo numero despues de alguna operacion cambia a true cuando se ha realizado una operacion
        
    public interfaz(){
        
        JFrame jfMain = new JFrame("Calculator");
        jfMain.setLayout(new BorderLayout(4, 4));
        
        norte();
        sur();
        
        jfMain.add(pN, BorderLayout.NORTH);
        jfMain.add(pS, BorderLayout.CENTER);
        
        jfMain.setLocation(100, 80);
        jfMain.setResizable(false);
        jfMain.setVisible(true);
        jfMain.setSize(300, 380);
        jfMain.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
    public void norte(){
        
        pN = new Panel(null);        
        
        jt1 = new JTextField("");
        jt2 = new JTextField("0");
        
        jt1.setHorizontalAlignment(JTextField.RIGHT); 
        jt2.setHorizontalAlignment(JTextField.RIGHT); 
        
        //Quitar bordes a los campos de texto
        jt1.setBorder(BorderFactory.createLineBorder(Color.white));
        jt2.setBorder(BorderFactory.createLineBorder(Color.white));
        
        //desabilitando los campos de texto
        jt1.setEditable(false);
        jt2.setEditable(false);
        
        jt1.setBackground(Color.white);
        jt2.setBackground(Color.white);
        
        pN.add(jt1); pN.add(jt2);
        
        jt1.setBounds(35, 10, 200, 15);
        jt2.setBounds(35, 25, 200, 30);
                
        pN.setSize(270, 47);
        pN.setVisible(true);
        
    }
    
    public void sur(){
        
        pS = new JPanel(new BorderLayout(6, 50));
        pS.setLayout(new BorderLayout(4, 4));
        
        botMem();
        botNum();
        botOpe();
        
        pS.add(pb1, BorderLayout.NORTH);  
        pS.add(pb2, BorderLayout.CENTER); 
        pS.add(pb3, BorderLayout.EAST); 
        
        pS.setSize(270, 330);
    }
    
    public void botMem(){
        
        pb1 = new Panel(null);
        
        mc = new JButton("MC");  mr = new JButton("MR");
        ms = new JButton("MS"); mMas = new JButton("M+");
        mMenos = new JButton("M-");
        
        mc.setFont(new Font("Arial", Font.BOLD, 11));
        mr.setFont(new Font("Arial", Font.BOLD, 11));
        ms.setFont(new Font("Arial", Font.BOLD, 11));
        mMas.setFont(new Font("Arial", Font.BOLD, 11));
        mMenos.setFont(new Font("Arial", Font.BOLD, 11));
        
        mc.setMargin(new Insets(1, 1, 1, 1)); mr.setMargin(new Insets(1, 1, 1, 1));
        ms.setMargin(new Insets(1, 1, 1, 1)); mMas.setMargin(new Insets(1, 1, 1, 1));
        mMenos.setMargin(new Insets(1, 1, 1, 1)); 
        
        mc.setBounds(35, 0, 33, 33); mr.setBounds(78, 0, 33, 33); ms.setBounds(121, 0, 33, 33);
        mMas.setBounds(164, 0, 33, 33); mMenos.setBounds(207, 0, 33, 33);
        
        pb1.add(mc); pb1.add(mr); pb1.add(ms); pb1.add(mMas); pb1.add(mMenos);
        
        mc.addActionListener(this); mr.addActionListener(this); ms.addActionListener(this);
        mMas.addActionListener(this); mMenos.addActionListener(this);
        
        pb1.setSize(270, 45);
        pb1.setVisible(true);        
    }

    public void botNum(){
     
        pb2 = new JPanel(null);
       
        
        int nx3=121, nx2=121, nx1=121, n3y=0, n2y=43, n1y=86;
        numeros = new JButton[11];
      
        //*****************************************
        //bloque para crear los botones, añadirlos y asignar numeros
        for (int i=0; i<=10; i++){
            
            if(i<=9){ numeros[i] = new JButton(""+i); pb2.add(numeros[i]); numeros[i].setMargin(new Insets(1, 1, 1, 1)); numeros[i].addActionListener(this); } else{ numeros[i] = new JButton("."); pb2.add(numeros[i]); numeros[i].setMargin(new Insets(1, 1, 1, 1)); numeros[i].addActionListener(this); } } //****************************************** //bloque para posicionar botones for(int i=10; i>=0; i--){
            
            if(i==10){
                numeros[i].setBounds(121, 129, 35, 35);
            }
            else{
                if(i<=9 && i>=7){
                    numeros[i].setBounds(nx3, n3y, 35, 35);
                    nx3-=43;
                }
                else if(i<=6 && i>=4){   
                    n3y+=43;                    
                    numeros[i].setBounds(nx2, n2y, 35, 35);
                    nx2-=43;
                }
                else if(i<=3 && i>=1){
                    n3y+=43;                    
                    numeros[i].setBounds(nx1, n1y, 35, 35);
                    nx1-=43;
                }
                else if(i==0){
                    numeros[i].setBounds(35, 129, 78, 35);                    
                }
            }                
        }
        
        pb2.setSize(170, 150);
        pb2.setVisible(true);
    }
    
    public void botOpe(){
        
        pb3 = new Panel(null);
        
        int c=0, x=0, y=0;
        
        operaciones = new JButton[7];
        
        for(int i=0; i<=6; i++){
            if(c<=1){
                
                operaciones[i] = new JButton(oper[i]);
                pb3.add(operaciones[i]);

                    operaciones[i].setBounds(x, y, 30, 35);

                    operaciones[i].setMargin(new Insets(1, 1, 1, 1));
                    operaciones[i].addActionListener(this);
                    x+=33;
                    c++;               
            }
            else{
                if(i==6){
                    x=0; y+=43;
                    operaciones[i] = new JButton(oper[i]);
                    pb3.add(operaciones[i]);

                    operaciones[i].setBounds(x, y, 65, 35);

                    operaciones[i].setMargin(new Insets(1, 1, 1, 1));
                    operaciones[i].addActionListener(this);
                    x+=33;
                    c++;
                }
                else{
                    c=0;
                    x=0; y+=43;
                    operaciones[i] = new JButton(oper[i]);
                    pb3.add(operaciones[i]);

                    operaciones[i].setBounds(x, y, 30, 35);

                    operaciones[i].setMargin(new Insets(1, 1, 1, 1));
                    operaciones[i].addActionListener(this);
                    x+=33;
                    c++;   
                }                             
            }                
                          
        }
        
        pb3.setVisible(true);
        pb3.setSize(120, 200);
    }
    
    public boolean isN(String ax){
        
        try{
            int n = Integer.parseInt(ax);
            return true;
        }catch(NumberFormatException e){
            return false;
        }
        
    }
    
    @Override
    public void actionPerformed(ActionEvent e) {
        
        String  op="";
        
        if(isN(e.getActionCommand())){ //cuando se oprimen numeros
             
            if(jt1.getText().equals("")){
                ax += e.getActionCommand();
                jt2.setText(ax);
            }
            else{
                if(tipOp==0){
                    if(t){
                        ax=""; 
                    
                        jt1.setText(jt2.getText());                        
                        ax += e.getActionCommand();
                        jt2.setText(ax);    
                        t = false;
                    }
                    else{
                        ax="";
                        ax += jt2.getText()+e.getActionCommand();
                        jt2.setText(ax);
                    }                
                }else{
                    ax="";
                    ax += jt2.getText()+e.getActionCommand();
                    jt2.setText(ax);
                }
            }            
        }
        else{//cuando se oprime el resto de botones
            
            if(e.getActionCommand().equals("R") ){
                jt1.setText("");
                Float a = Float.parseFloat(jt2.getText());
                jt2.setText(""+Math.sqrt(a)); 
            }
            if(e.getActionCommand().equals("C") ){ //para reiniciar valores y limpiar pantalla
                tipOp=0; n1 = 0; n2 =0; nr=0; jt1.setText(""); jt2.setText("0"); ax="";
            }   
            if(e.getActionCommand().equals("MC")){//para limpiar la memoria de la calculadora
                ms.setForeground(Color.black);
                jt1.setText(""); jt2.setText("0");
                M=0;
            }
            if(e.getActionCommand().equals("MR")){//para mostrar valor almacenado en la memoria
                jt1.setText("");
                jt2.setText(String.valueOf(M));
            }if(e.getActionCommand().equals("MS")){//guardar un valor en la memoria
                ms.setForeground(Color.red);
                M = Float.parseFloat(jt2.getText());
            }
            if(e.getActionCommand().equals("M+")){//sumar valor de la pantalla con el valor de la memoria
                M += Float.parseFloat(jt2.getText());
            }
            if(e.getActionCommand().equals("M-")){//restar valor de la pantalla con el valor de la memoria
                M -= Float.parseFloat(jt2.getText());
            }    
            if(e.getActionCommand().equals(".")){//usar el punto para los decimales
                ax="";
                if(numeros[10].isEnabled()){
                    numeros[10].setEnabled(false);
                    ax = jt2.getText() +".";
                    jt2.setText(ax);
                }
            }
            if(e.getActionCommand().equals("+") ){//boton suma
                numeros[10].setEnabled(true);
                ax="";
                if(tipOp==1){
                        
                }else if(tipOp==0 ){//validacion para no chocar con otras operaciones
                        if(jt1.getText().equals("") ){
                            n1 = Float.parseFloat(jt2.getText());                    
                            ax += jt1.getText()+jt2.getText();
                            jt1.setText(ax+" + ");
                            jt2.setText("");
                            tipOp = 1;
                        }
                        else {
                            if(!t){//validacion para nueva operacion
                                n1 = Float.parseFloat(jt2.getText());                    
                                ax += jt2.getText();
                                jt1.setText(ax+" + ");
                                jt2.setText("");
                                tipOp = 1;
                            }
                            else{//usar otras operaciones con la suma
                                n1 = Float.parseFloat(jt2.getText());                    
                                ax += jt1.getText();
                                jt1.setText(ax+" + ");
                                jt2.setText("");
                                tipOp = 1;
                            }
                        }
                    }                     
             }
                if(e.getActionCommand().equals("-") ){//cuando se decide restar
                    numeros[10].setEnabled(true);
                    ax="";
                    if(tipOp==2){
                        
                    }else if(tipOp==0){//validacion para no chocar con otras operaciones
                        if(jt1.getText().equals("")){
                            n1 = Float.parseFloat(jt2.getText());                    
                            ax += jt1.getText()+ jt2.getText();
                            jt1.setText(ax+" - ");
                            jt2.setText("");
                            tipOp = 2;
                        }
                        else{
                            if(!t){//validacion para nueva operacion
                                n1 = Float.parseFloat(jt2.getText());                    
                                ax += jt2.getText();
                                jt1.setText(ax+" - ");
                                jt2.setText("");
                                tipOp = 2;
                            }
                            else{//usar otras operaciones con la suma
                                n1 = Float.parseFloat(jt2.getText());                    
                                ax += jt1.getText();
                                jt1.setText(ax+" - ");
                                jt2.setText("");
                                tipOp = 2;
                            }
                        }
                    }                    
                }
                if(e.getActionCommand().equals("*") ){//cuando se decide multiplicar
                    numeros[10].setEnabled(true);
                    ax="";
                    if(tipOp==3){
                        
                    }else if(tipOp==0){//validacion para no chocar con otras operaciones
                        if(jt1.getText().equals("")){
                            n1 = Float.parseFloat(jt2.getText());                    
                            ax += jt1.getText()+jt2.getText();
                            jt1.setText(ax+" * ");
                            jt2.setText("");
                            tipOp = 3;
                        }
                        else{
                            if(!t){//validacion para nueva operacion
                                n1 = Float.parseFloat(jt2.getText());                    
                                ax += jt2.getText();
                                jt1.setText(ax+" * ");
                                jt2.setText("");
                                tipOp = 3;
                            }
                            else{//usar otras operaciones con la suma
                                n1 = Float.parseFloat(jt2.getText());                    
                                ax += jt1.getText();
                                jt1.setText(ax+" * ");
                                jt2.setText("");
                                tipOp = 3;
                            }
                        }
                    }                      
                }
                if(e.getActionCommand().equals("/") ){//cuando se decide dividir
                    numeros[10].setEnabled(true);
                    ax="";
                    if(tipOp==4){
                        
                    }else if(tipOp==0){//validacion para no chocar con otras operaciones
                        if(jt1.getText().equals("")){
                            n1 = Float.parseFloat(jt2.getText());                    
                            ax += jt1.getText()+jt2.getText();
                            jt1.setText(ax+" / ");
                            jt2.setText("");
                            tipOp = 4;
                        }
                        else{
                            if(!t){//validacion para nueva operacion
                                n1 = Float.parseFloat(jt2.getText());                    
                                ax += jt2.getText();
                                jt1.setText(ax+" / ");
                                jt2.setText("");
                                tipOp = 4;
                            }
                            else{//usar otras operaciones con la suma
                                n1 = Float.parseFloat(jt2.getText());                    
                                ax += jt1.getText();
                                jt1.setText(ax+" / ");
                                jt2.setText("");
                                tipOp = 4;
                            }
                        }
                    }                      
                }
                if(e.getActionCommand().equals("=") && !jt2.getText().equals("")){
                    t = true;
                    if(tipOp==1){//operacion para la suma
                        tipOp = 0;
                        ax="";
                        ax+=jt1.getText() + jt2.getText();
                        jt1.setText(ax);
                        n2 = Float.parseFloat(jt2.getText());
                        nr=n1+n2;
                        jt2.setText(String.valueOf(nr));
                    }
                    else if(tipOp==2){ //operacion para la resta
                        tipOp = 0;
                        ax="";
                        ax+=jt1.getText()+jt2.getText();
                        jt1.setText(ax);
                        n2 = Float.parseFloat(jt2.getText());
                        nr=n1-n2;
                        jt2.setText(String.valueOf(nr));
                    }
                    if(tipOp==3){ //operacion para la multiplicacion
                        tipOp = 0;
                        ax="";
                        ax+=jt1.getText()+jt2.getText();
                        jt1.setText(ax);
                        n2 = Float.parseFloat(jt2.getText());
                        nr=n1*n2;
                        jt2.setText(String.valueOf(nr));
                    }
                    if(tipOp==4){ //operacion para la multiplicacion
                        if(Float.parseFloat(jt2.getText())!=0){
                            tipOp = 0;
                            ax="";
                            ax+=jt1.getText()+jt2.getText();
                            jt1.setText(ax);
                            n2 = Float.parseFloat(jt2.getText());
                            nr=n1/n2;
                            jt2.setText(String.valueOf(nr));
                        }
                        else
                            JOptionPane.showMessageDialog(null, "No se puede realizar divison por 0");
                    }
                }
        }        
    }       
}

 

Una vez ejecutada la aplicación veremos lo siguiente:

La segunda clase es larga, ya que en esta se realizaron varias validaciones, como también al momento de realizar las operaciones, el ejercicio se trato de realizar lo mas parecido posible a la calculadora de Windows. Espero que el ejercicio practico sea de gran utilidad 😉

WP Dev JaGonzalez

Hijo, esposo y padre de un hermoso niño. Amante de los animales, la tecnología, informática y programación. Si tienes alguna duda, inquietud, comentario o deseas comunicarte directamente conmigo, puedes enviarme un correo electrónico a admin@jagonzalez.org

Ver comentarios

  • hi this is a very important for my work since I am in high school and as this was what most caught my attention I need your help because it is very difficult for me this programming and then you do not understand all this programming it is not mine. I would be very grateful if you lean on this job posting videos that are more useful to me.
    If so thank you very much for yu collaboration and for your help us programmers.
    Thank you and goodbye

    • Thanks for reading my blog. The problem for you with the videos is that would make in Spanish, and so you see your native language is English.

      In any case it is something that could soon make, as for work and family time to devote to my blog is almost limited.

      Greetings and success!

  • Saludos.
    Gracias por el artículo.
    Será posible me pases el código de la solución completa?
    Te agradezco de antemano!

Compartir
Publicado por
WP Dev JaGonzalez

Entradas recientes

iPhone Hackeado: Qué Hacer para Proteger tu Dispositivo y Asegurar tu Seguridad

¿Has notado aplicaciones desconocidas o un drenaje inesperado de la batería? Estos podrían ser indicios…

2 meses hace

Cómo Restablecer un iPhone a su Estado de Fábrica

Saber cómo Restablecer un iPhone a su Estado de Fábrica es clave para solucionar problemas…

2 meses hace

Motorola planea lanzar al menos dos nuevos teléfonos Moto G en septiembre

Motorola ha confirmado el lanzamiento de Moto G84 5G y Moto G54 5G en India,…

1 año hace

El equipo de WizardLM afirma que un modelo de IA de terceros les robó el trabajo

Recuerde WizardCoder, ¿el codificador de IA que cubrimos recientemente aquí en Windows Report? Nos jactamos…

1 año hace

Las fallas del complemento Jupiter X Core amenazaron a 172.000 sitios web con apropiaciones de cuentas

Los investigadores han descubierto numerosos fallos de seguridad en el complemento WordPress Jupiter X Core…

1 año hace

Consola portátil Xbox: aquí tienes todo lo que necesitas saber al respecto

Para solucionar problemas del sistema de PC con Windows, necesitará una herramienta dedicada Fortect es…

1 año hace