Calculadora en Java
Calculadora en Java
en
java
Java es un lenguaje que nos permite crear aplicaciones Desktop para muchos sistemas operativos. Hacer un programa en java como una calculadora con interfaz grfica nos permite aprender sobre botones, paneles, eventos y otras cuestiones bsicas del desarrollo de aplicaciones. Programa Calculadora
Por cuestiones de espacio y legibilidad el cdigo fuente de la calculadora en java se muestra en porciones. Si deseas el cdigo completo, ste est adjuntado en las descargas del artculo.
Para crear la calculadora de la imgen anterior debemos tener en cuenta la interfaz y los eventos. Lo ideal es mantener el cdigo que permite los clculos en una clase separada, pero aqui todo se realizar en una nica clase. Para comenzar a trabajar con componentes grficos y eventos debemos agregar al inicio del archivo de la clase las siguientes inclusiones: view sourceprint?
1 import java.awt.*; 2 import java.awt.event.*; 3 import javax.swing.*;
Con
esto
importamos
todas
las del
clases
awt,
events
swing.
Estructura
programa
Nuestra clase se llamar Main y nuestro archivo main.class. Este es su esqueleto: view sourceprint?
01 public class Main extends JFrame implements ActionListener { 02 03 private JTextField t;
04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 }
b = 0;
public static void main(String[] args) { new Main(); } public void actionPerformed(ActionEvent e) { ... }
Como se puede ver, nuestra clase extiende JFrame e implementa la interface ActionListener que nos obliga a implementar el mtodo actionPerformed (click en botn). Se tienen atributos privados, el primero un cuadro de texto, los demas contadores y variables de control. Luego tenemos el constructor de la clase, que nos servir para crear la interfaz y asignar eventos a los controles correspondientes (lo veremos ahora mismo). Luego tenemos un mtodo estatico especial llamado main (en minsculas) que nos permite ejecutar la calculadora. Y por ltimo un evento para capturar los clicks del usuario sobre los diferentes botones de la calculadora. Creando la interfaz
Primero asignamos el ttulo de la ventana y creamos un vector con los caracteres de los botones. Si lo notaron tiene un orden algo extrao, esto se debe al algoritmo que se usa luego para crear los controles recorriendo el vector. Posteriormente creamos un JPanel y le asignamos un layout tipo grid de 4 columnas, entonces al recorrer el vector vamos agregando a este panel objetos JButton creados con la etiqueta que obtenemos del item actual del vector y de paso ya le asignamos el controlador del evento (el mismo objeto, this, hace referencia a esta misma instancia de la clase Main). Al salir del ciclo ya tenemos todos los botones, pero nos falta un poco para terminar el diseo. Creamos un cuadro de texto y le fijamos alineacin de texto a la derecha (ser donde se muestren los resultados entre otras cosas). Inicialmente le asignamos un texto igual a "0". Al panel principal le colocamos el layout BorderLayout, agregamos el cuadro de texto arriba y al centro el panel que contiene todos los botones generados anteriormente. Capturando los eventos
Nuestra interfaz nos qued muy bonita, pero no hace nada. Debemos darle funcionalidad y esto lo hacemos en el evento que captura los click del usuario sobre los diferentes botones de la interfaz. view sourceprint?
01 public void actionPerformed(ActionEvent e) { 02 char c = ((JButton) e.getSource()).getText().charAt(0); 03 04 05 06 07 08 09 10 } if (c >= '0' && c <= '9') { .... Implementacin //Log System.out.print(a); System.out.print(" "); System.out.print(b); ....
La variable local c se asigna con el caracter que hace referencia al botn pulsado (ver el contenido del vector de etiquetas de botones que se declara en el constructor de la clase).
Con esa variable sabremos qu es lo que puls el usuario y consecuentemente deberemos trabajar con dicha orden. Si es un dgito haremos una cosa, si es un signo de operatoria otra cosa. Si se trata del signo igual deberemos calcular e informar. Y si es el simbolo C (clear), simplemente resetearemos la calculadora. El cdigo completo de este algoritmo se puede descargar en la seccin correspondiente. Es un cdigo con varias comparaciones, pero facil de comprender. Posiblemente el cdigo tenga algn que otro error, si te animas a mejorarlo podes publicar tu mejora como uno de los comentarios de este artculo. Si tiene alguna pregunta sobre ste artculo por favor deje un comentario y ser respondido. Tambin recuerde que ste artculo tiene descargas disponibles
Que tal mi amigo, aqui te dejo el codigo package yahoo; import java.io.BufferedReader; import java.io.InputStreamReader; /** * * @author Meme */ public class Calculadora { /** Creates a new instance of Calculadora */ public Calculadora() { } public float suma(float a, float b){ return a + b; } public float resta(float a, float b){ return a - b; } public float multiplicacion(float a, float b){ return a * b; } public float division(float a, float b){ if(b > 0){ return a / b; } else { return 0; } } public static void main(String a[]){ int opcion = 0; Calculadora objeto = new Calculadora(); try{ while(true){ System.out.println("Menu:"); System.out.println("\t1\tSumar"); System.out.println("\t2\tRestar"); System.out.println("\t3\tMultiplicar"); System.out.println("\t4\tDividir"); System.out.println("\t5\tSalir"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
opcion = Integer.parseInt(br.readLine()); if(opcion > 0 && opcion < 5){ System.out.println("Ingrese primer numero:"); float n1 = Float.parseFloat(br.readLine()); System.out.println("Ingrese segundo numero:"); float n2 = Float.parseFloat(br.readLine()); switch(opcion){ case 1: System.out.println("\n\t\tEl resultado es: " + objeto.suma(n1, n2) + "\n"); break; case 2: System.out.println("\n\t\tEl resultado es: " + objeto.resta(n1, n2) + "\n"); break; case 3: System.out.println("\n\t\tEl resultado es: " + objeto.multiplicacion(n1, n2) + "\n"); break; case 4: System.out.println("\n\t\tEl resultado es: " + objeto.division(n1, n2) + "\n"); break; default: break; } } else { System.exit(0); } } }catch(Exception e){ e.printStackTrace(); } } }