Cargando la página...

Calculadora con interfaz gráfica en 10 minutos

Publicado por Administrador el 01/03/2009 en Java - Nivel Básico

Tabla de contenidos

Avatar de

La tabla de contenidos pertenece al artículo completo y no al contenido parcial de cada página del mismo si fuese el caso.

Leer los comentarios.

Resúmen

Este artículo explicará como realizar una calculadora básica que realice las operaciones de suma, resta, división y multiplicación desarrollada como una aplicación Java, con interface gráfica y basada en eventos. Intentaré explicar cada porción de código para que asi sirva de ejemplo para comenzar a programar en este lenguaje.

Sobre el autor

Avatar de CID

Administrador tiene 29 años, vive en Argentina / Santa Fe / Santa Fe y su ocupación es Desarrollador de aplicaciones web.

Forma parte del club desde el 29/07/2007 habiendo estado en linea ayer a las 00:39 por última vez.

Ha publicado 34 artículos en clubdesarrolladores con un promedio de valoración de 7.63 puntos. Puedes visitar su sitio web en http://www.clubdesarrolladores.com

Estadísticas

  • Leido 24177 veces
  • Valorado 6.95 puntos

Calculadora 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 gráfica nos permite aprender sobre botones, paneles, eventos y otras cuestiones básicas del desarrollo de aplicaciones.

Programa Calculadora



Por cuestiones de espacio y legibilidad el código fuente de la calculadora en java se muestra en porciones. Si deseas el código completo, éste está adjuntado en las descargas del artículo.


/res/userimages/1/25-calculadora.PNG

Para crear la calculadora de la imágen anterior debemos tener en cuenta la interfaz y los eventos. Lo ideal es mantener el código que permite los cálculos en una clase separada, pero aqui todo se realizará en una única clase.

Para comenzar a trabajar con componentes gráficos y eventos debemos agregar al inicio del archivo de la clase las siguientes inclusiones:


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


Con esto importamos todas las clases awt, events y swing.

Estructura del programa



Nuestra clase se llamará Main y nuestro archivo main.class. Este es su esqueleto:

public class Main extends JFrame implements ActionListener {

private JTextField t;
private int a = 0, b = 0;
private int eq = 0;
private char op = 0;

public Main() {
...
}

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 método actionPerformed (click en botón).
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 método estatico especial llamado main (en minúsculas) 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



Dentro del constructor podemos ver este código:


super("Calculadora Básica");
String labelButtons[] = {"7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", "C", "=", "+"};
JPanel cp = (JPanel) this.getContentPane();
cp.setLayout(new BorderLayout());
JPanel p = new JPanel();
p.setLayout(new GridLayout(0, 4));
for (int i = 0; i < labelButtons.length; ++i) {
JButton button = new JButton(labelButtons[i]);
button.addActionListener(this);
p.add(button);
}
t = new JTextField();
t.setHorizontalAlignment(JTextField.RIGHT);
t.setText("0");
cp.add(t, BorderLayout.PAGE_START);
cp.add(p, BorderLayout.CENTER);


Primero asignamos el título de la ventana y creamos un vector con los caracteres de los botones. Si lo notaron tiene un orden algo extraño, 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 diseño. Creamos un cuadro de texto y le fijamos alineación 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.


public void actionPerformed(ActionEvent e) {
char c = ((JButton) e.getSource()).getText().charAt(0);
if (c >= '0' && c <= '9') {
.... Implementación
//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 botón 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 dígito 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 código completo de este algoritmo se puede descargar en la sección correspondiente. Es un código con varias comparaciones, pero facil de comprender.

Posiblemente el código tenga algún que otro error, si te animas a mejorarlo podes publicar tu mejora como uno de los comentarios de este artículo.

Si tiene alguna pregunta sobre éste artículo por favor deje un comentario y será respondido.

También recuerde que éste artículo tiene descargas disponibles.

Descargas

descarga Código fuente de calculadora en Java (01.03.09 | 1869 descargas | 12.59 Kbytes) Más información:

descarga Calculadora gráfica en Java, versión mejorada (10.04.09 | 1917 descargas | 13.53 Kbytes) Más información:

Comentarios

Sus comentarios son importantes.

Listado de comentarios

1
27
marzo
2009
avatar
Jim Unikornian aportó:
buen trabajo!
2
31
marzo
2009
avatar
josue jonatan aportó:
Hola gracias me ah servido como ejemplo para mi tarea de la universidad saludos
3
05
abril
2009
avatar
Tatiana Garcia aportó:
hola me sirve mucho tu trabajo pero quisiera saber si me puedes ayudar con una mas dificil como lo es la de calculadora de windows...soy principiante en java.muchas gracias
4
10
abril
2009
avatar
Administrador [Autor] aportó:
Gracias por los comentarios!

He subido como descarga una versión mejorada de la calculadora. De nuevo, es una calculadora básica, no esperen una calculadora científica ni mucho menos. El código es mucho más sencillo de entender. Con el tiempo iré mejorandola.

Saludos!
5
20
abril
2009
avatar
daniel cahuich aportó:
ey hermano graz por la ayuda, tenia algunas dudas en mis lineas de comando pero ya kedaron
hasta pronto
saludos
6
08
mayo
2009
avatar
jesus romo aportó:
esta muy entendible.Me va servir mucho para mi proyecto final.
gracias
7
22
mayo
2009
avatar
Lucas Luna aportó:
hola me gustaria que me ayudes en la creacion de una especie de hoja electronica con jtable
8
26
mayo
2009
avatar
oye muchas, un poco complicado pa mi pero al fin lo comprendi todo
y gracias de nuevo
9
28
mayo
2009
avatar
Marisol Rivera aportó:
Muy bien hecho el codigo

Muy buen trabjajo





Gracias me sirvio de mucho :)
10
31
mayo
2009
avatar
sorayda nieves aportó:
lo voy a tomar de ejmelo gracias
11
31
mayo
2009
avatar
Administrador [Autor] aportó:
Me alegra mucho que les sirva.
Traten de modificarlo, agregarle nuevas funcionalidades (por ejemplo que calcule el seno, el coseno, la tangente, etc.).

Cualquier duda, ya saben.

Saludos.
12
03
julio
2009
avatar
jose luis aportó:
MUCHAS GRACIAS UN BUEN PROYECTO, ESTAMOS EN CONTACO PARA Q ME DES UNA MANO EN JAVA.. VOY A PRACTICAR CON TU PROYECTO Y ASI PODER AGREGARLE MAS COSAS.. PERO GRACIAS
13
11
julio
2009
avatar
Mariano Gomez aportó:
ME HAN SALVADO LA VIDA....EN MI TAREA DE LA UNIVERSIDAD....SOY NUEVO EN ESTO ASI K ESTA UN POKO COMPLICADO PARA MI PERO SI LO HE COMPRENDIDO A LA PERFECCION!! MUCHAS GRACIAS
14
21
septiembre
2009
avatar
christian chex aportó:
EXELENTE TRABAJO... ESTOY MUY SATISFECHO, EN VERDAD SE LOS AGRADESCO Y SIGAN ADELANTE!!!
15
14
octubre
2009
avatar
Hernan Torres aportó:
muchas gracias me ha servido demasiado he comprendido mas :D Thanks
16
24
octubre
2009
avatar
gracias me ayudo muxooooooooooooo!!!!!!!!!!!!!! pero necesito que sea iteractiva para los niños de primaria
17
07
noviembre
2009
avatar
kari vp aportó:
woooooooooooooooooooooooooooooooow!!!!!

mi prof me pidio algo asi pero la neta el sr. no enseña ni jota y le entendi perfecto a tu explicacion. Que buena onda que no eres de esos programadores que no les gusta enseñar lo q saben y mandan a la goma a los q apenas empezamos a aprender.

grax!!
bye
18
24
noviembre
2009
avatar
jorge lopez aportó:
genia la implementare con mas cosas como el seno y coseno para la un oye si kiero el main solo ye l kodigo en otra como se hacen comun mente como lo hago
19
30
noviembre
2009
avatar
Cristiam Sanchez aportó:
Muchas gracias,,, me parece excelente trabajo bien explicado.
20
27
enero
2010
avatar
HOLA MUCHAS GRACIAS, ESTA EXCELENTE EL TRABAJO PERO TENGO UN PROYECTO QUE REALIZAR PARECIDO A ESTE SOLO QUE, MUESTRE LA CONVERSION DE POSTFIJA A INFIJA Y VICEVERSA....... ¿ME PODRIAS AYUDAR? X FIS
GRACIAS, SALUDITOS....
21
05
febrero
2010
avatar
Hola muy bueno tu trabajo pero sera que me puedes ayudar haciendo un menu que tenga acceso a una calculadora de 10 funsiones y agenda...? eso lo tengo que hacer en java espero tu respuesta Saludos... =)
22
25
febrero
2010
avatar
Hola... muy buena calculadora, estaba haciendo una similar, pero no se como hacer para que me haga la operacion con mas de una variable sin necesidad de estar dandole al igual siembre.. me explico, que realize la operacion "1+2+3-5.. etc" y que al darle click a cualquier simbolo de operacion me de el resultado y de exactamente lo mismo con el =
Muchisimas gracias si pudiera ayudarme =)
23
05
marzo
2010
avatar
Administrador [Autor] aportó:
Cristian Aguilera, lo que estas necesitan es implementar una calculadora que entienda notación postfija, hay mucho info en internet de como hacerlo.
La idea de esta calculadora es que sirva de base, es muy pero muy básica. Les dejo a quien le interese el trabajo de mejorarla y publicar quiza aqui su propia versión.

Saludos!
24
16
marzo
2010
avatar
Erick Veliz aportó:
Gracias esta muy bueno, solo que no muy entiendo el array.
25
20
marzo
2010
avatar
Cristian Macias aportó:
Muchas Gracias esta muy bien explicado me ayudo mucho a aclarar mis dudas que tenia sobre como crear la calculadora...
26
22
marzo
2010
avatar
Angelica Oviedo aportó:
Hola Muchas gracias por la ayuda me da una bases para nuevos programas felicitaciones al creador la forma de explixarlo es maravillosa totalmente entendido gracias
27
22
marzo
2010
avatar
yadira salayes aportó:
Hola
De verdad me sirvio de mucho este codigo aunque algunas cosas no las entendi muy bien ya que soy estudiante de bachillerato
28
24
marzo
2010
avatar
juan pacahuala aportó:
Parece muy bueno me voy a ver si me funk igualmente gracias esta perfect!!!
29
25
marzo
2010
avatar
diego laime aportó:
oye esta bueno el trabajo ke hiciste,
yo tengo un problema parecido, yo tengo ke crear u n programa ke pueda simular el trabajo ke realiza el procesador y luego mostrarlo graficamente,, mi duda es la siguiente ke libredia debo agregar para mostrar eventos ke van pasando a la ora de ejecutar el programa sin necesidad de ke el usuario tenga ke ace clic o algo asi

si sabes algo de lo que te digo me avisas porfa
30
25
marzo
2010
avatar
Andres Restrepo aportó:
Te felicito!! muy entendible el codigo, casualmente me has hecho la tarea, gracias
31
03
abril
2010
avatar
Enrico Aldi aportó:
Interesante!! muchas gracias!! voy a ver si me sirve para mi proyecto en la universidad :)
32
08
abril
2010
avatar
Hola buen trabajo este ahh... tengo algo de tiempo programando java pero solo he experimentado con la consola, tu crees que podrias comentar un poco el metodo initFrame para entenderlo mejor, estoy perdido con ese metodo. Gracias.
33
16
abril
2010
avatar
jeriko fx aportó:
muy buen paorte esto me servirar para ir practicando con el netbeans Gracias =)
34
17
abril
2010
avatar
Paul Chicaiza aportó:
Ejemplo bien hecho... ojala me puedan ayudar con una conexion a base de datos
35
22
mayo
2010
avatar
pablo ortuño aportó:
muchas gracias por el tema me va a servir de mucho
36
30
mayo
2010
avatar
Lopez Garcia aportó:
de lo mejor me parece genial compartir el conocimiento
37
05
junio
2010
avatar
ola! kisiera saber como resolver el error k me sale en la compilacion del codigo del main, ya k me sale un error en la sig. parte:

found : java.lang.Integer
required: int
a = Integer.valueOf("" + c)

^
si pudieran contestarme lo antes posible, es urgentisimo!!!grax! ;)
38
05
junio
2010
avatar
found : java.lang.Integer
required: int
a = Integer.valueOf("" + c);
^
ahi aparece donde esta el error,jeje
39
22
julio
2010
avatar
roberto furber aportó:
wuuuauuu!!!!!es un buen ejemplo gracias por ke la mia tenia un buen de errores!!!!!

Agregar un comentario

Debe estar identificado para agregar un comentario