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.