Proyecto Personal - Calculadora
Bueno antes de empezar, quiero confesarles que me llevo casi 2 meses ( los hacia cada viernes, sábado y domingo) y gracias a los tutoriales u recomendaciones de amigos que conocen la programación. Ahora presentare la interfaz gráfica de mi calculadora.
Para personalizar los botones, ir a este link:
https://www.youtube.com/watch?v=lGHM5BQsbUQ
(copiar y pegar en el URL)
En total agregar 27 botones, 2 labels para la fecha y hora, 1 por si quieren ponerle un titulo, y 1 para el fondo (hacer esto despues de diseñar el formulario, poner diseño absoluto) y un jTextField para la pantalla
En los numerales poner de 0 al 9, 4 de ellos para los signos, mas, menos, multiplicar y dividir, 2 de ellos para que limpie el campo de texto, 1 para que sea el numero positivo o negativo, el punto grande que esta en la imagen es el separador decimal y 2 de ellos para minimizar o cerrar la calculadora.
Listo? Ahora empecemos a programar:
lo primero es importar algunas librerias:
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.swing.Timer;
Declarar variables dentro del "public class"
String memoria1, signo, memoria2;
boolean minimizar = false;
En el "public" hacemos lo siguiente:
public Calculadora() {
initComponents();
this.setSize(349, 600);
this.setLocationRelativeTo(this);
this.setIconImage(new ImageIcon(getClass().getResource
("/Imagenes/calculadora.png")).getImage());
this.setTitle("CiberCalculadora");
txtpantalla.setEditable(false);
//FECHA DEL SISTEMA
Date sistFecha=new Date();
SimpleDateFormat formato=new SimpleDateFormat("dd" +"MMMMM YYYY");
txtFecha.setText(formato.format(sistFecha));
//HORA DEL SISTEMA
Timer tiempo=new Timer(100, new Calculadora.horas());
tiempo.start();
}
- El codigo, this.setSize(349, 600); es el tamaño del formulario
- El codigo, this.setLocationRelativeTo(this); es para que al momento de ejecutar la aplicacion nos aparezca al medio de la pantalla de nuestra PC.
- esta linea de codigo this.setIconImage(newImageIcon(getClass().getResource
("/Imagenes/calculadora.png")).getImage()); es para cambiarle el icono de nuestro formulario ya que por defecto siempre aparece el logo de JAVA. - Este codigo, this.setTitle("CiberCalculadora"); es el titulo de nuestro formulario.
El codigo donde dice : //HORA DEL SISTEMA.. para que se muestre la hora lo primero es crear una clase como veremos aqui:
class horas implements ActionListener{
public void actionPerformed(ActionEvent e){
Date sistHora=new Date();
String pmAm="hh:mm:ss a";
SimpleDateFormat format=new SimpleDateFormat(pmAm);
Calendar hoy=Calendar.getInstance();
txtHora.setText(String.format(format.format(sistHora),hoy));
}
}
Ahora crearemos un método publico estático, ahi es donde se hara el calculo, y tambien ingresaremos 3 parametros de tipo String:
public static String calculadora(String memo1,String memo2,String sig){
Double resultado=0.0;
String respuesta;
if (sig.equals("-")) resultado=Double.parseDouble(memo1)Double.parseDouble +
+ (memo2);// + es una sola linea de codigo
if (sig.equals("+"))
resultado=Double.parseDouble(memo1)+Double.parseDouble+
+(memo2); // el + es una sola linea de codigo
if (sig.equals("*"))
resultado=Double.parseDouble(memo1)*Double.parseDouble+
+(memo2);// el + es una sola linea de codigo
if (sig.equals("/"))
resultado=Double.parseDouble(memo1)/Double.parseDouble+
+(memo2);// el + es una sola linea de codigo
respuesta=resultado.toString();
return respuesta;
}
Con este codigo llamaremos al boton igual para que realice el calculo
Ahora a programar los numeros:
El boton 1, seria asi:
txtpantalla.setText(txtpantalla.getText()+"1");
el txtpantalla es el nombre de nuestra variable en el jTextField, lo primero es devolver el 1 para luego obtener el 1, ejemplo:
"si presionamos el boton '1' seria el uno, correcto?; ahora si presionamos dos veces '1' ya no seria uno, sino once y asi seria con los otros numeros. El codigo para los otros numero es el mismo lo que cambia es el uno, lo cambiamos y escribimos (2,3,4,5,6,7,8,9,0)
Ahora a programar el punto decimal:
Antes de programar el boton punto, primero creamos un metodo publico estatico de tipo booleano con parametro de tipo String, para saber si necesitamos calcular con números decimales o no:
public static boolean existepunto(String cadena){
boolean resultado1;
resultado1=false;
for (int i = 0; i < cadena.length(); i++) {
if (cadena.substring(i, i+1).equals(".")) {
resultado1=true;
break;
}
}
return resultado1;
}
Una vez hecho el metodo ahora programaremos el botón punto
String cadena;
cadena=txtpantalla.getText();
if (cadena.length()<=0) {
txtpantalla.setText("0.");
}else{
if (!existepunto(txtpantalla.getText())) {
txtpantalla.setText(txtpantalla.getText()+".");
}
}
Ahora programaremos los signos + - * / :
if (!txtpantalla.getText().equals("")) {
memoria1=txtpantalla.getText();
signo="+";
txtpantalla.setText("");
}
la condicion dice de que si la pantalla es diferente (campo vacio) la variable "memoria1 capturará el primer numero ingresado y luego el operando, en este caso el signo + (que va a sumar) y luego limpiara el campo de texto.
El resto de los signos es el mismo codigo solo que cambian ahora los signos.
Ahora programaremos el boton +/- (positivo o negativo)
Double num;
String cadena;
cadena=txtpantalla.getText();
if (cadena.length()>0) {
num=(-1)*Double.parseDouble(cadena);
txtpantalla.setText(num.toString());
}
Con este codigo hacemos el cambio de signo en los numeros, sea positivo o negativo.
Ahora programaremos el boton 1/x (fraccion - N°denominador)
String indice;
Double num;
indice=txtpantalla.getText();
if (indice.length()>0) {
num=1/(Double.parseDouble(indice));
txtpantalla.setText(num.toString());
}
Con este código, el numero que ingresemos en la pantalla, se convertirá en el numero denominador de numerador el 1, y calculará al hacer click en el botón.
Ahora programaremos en C y el CE:
el C:
String cadena;
cadena=txtpantalla.getText();
if (cadena.length()>0) {
cadena=cadena.substring(0, cadena.length()-1);
txtpantalla.setText(cadena);
}
Este codigo quiere decir que borrara uno por uno si damos click en el boton "C"
el CE:
txtpantalla.setText("");
Este codigo es sencillo, solo limpiaremos toda la pantalla
y finalmente el boton igual:
String resultado;
memoria2=txtpantalla.getText();
if (!memoria2.equals("")) {
resultado=calculadora(memoria1,memoria2,signo);
txtpantalla.setText(resultado);
}
Declarar una variable de tipo string, capturar la memoria2 y hacer la condicion que si memoria2 es diferente (campo vacio) procedera a calcular y llamar al metodo publico "calculadora" e ingresar las variables dentro del parentesis, limpiar la pantalla e imprimir en la pantalla el resultado.
Para acabar, programar el boton minimizar y cerrar:
minimizar:
Primero ya deberia estar declarado la variable de tipo booleano como esta en la primera parte de arriba en el public class; ahora a ver el codigo:
this.setExtendedState(ICONIFIED); //para minimizar
if (!minimizar) {
minimizar = false;
} else {
minimizar = true;
}
Cerrar:
Es facil, solo hacer un mensaje como veremos este codigo:
this.dispose();
JOptionPane.showMessageDialog
(null,"Muchas gracias, hasta la proxima","Salir de la Aplicacion",JOptionPane.CLOSED_OPTION);
System.exit(0);
Primero cierrar la ventana y al cerrar nos muestra un mensaje de agradecimiento y cierra el sistema y LISTO ya tenemos nuestra calculadora. ahora a probar nuestra CALCULADORA:
Haremos la suma 12 + 23:
ESTO SERIA TODO....GRACIAS :D