Ir al contenido principal

Calculadora escrita en Java Swing


Hola , bueno aqui les dejo un codigo muy util a la hora de querer realizar cualquier aplicacion que posea una interfaz para el usuario, en este caso se desarrollo completamente en Swing y applet, el codigo no es mio pero se que servira mucho de utilidad para ti. =) saludos

Comentarios

Gustavo Delgado dijo…
//
// Calculadora.java
// Copyright (c) 1996, Agustin Froufe
// Todos los derechos reservados.
//
// No se asume ninguna responsabilidad por el uso o alteracion de este
// software. Este software se proporciona COMO ES, sin garantia de ningun
// tipo de su funcionamiento y en ningun caso sera el autor responsable de
// da�s o perjuicios que se deriven del mal uso del software, aun cuando
// este haya sido notificado de la posibilidad de dicho da�.
//
// Compilador: javac 1.0
// Autor: Agustin Froufe
// Creacion: 12-Sep-1996 15:39:38
//
//--------------------------------------------------------------------------
// Esta informacion no es necesariamente definitiva y est sujeta a cambios
// que pueden ser incorporados en cualquier momento, sin avisar.
//--------------------------------------------------------------------------

import java.awt.*;
import java.applet.Applet;

public class Calculadora extends Applet {
TextField pantallita;
public final int OP_NADA = 0;
public final int OP_SUMA = 1;
public final int OP_RESTA = 2;
public final int OP_MULT = 3;
public final int OP_DIV = 4;
public final int OP_IGUAL = 5;
public final int OP_BORRAR_C = 6;
public final int OP_BORRAR_AC = 7;
public final int PUNTO_DECIMAL = -1;

String cadDecimal;
int operador = OP_NADA;
boolean nuevoNumero = true;
boolean esDecimal = false;
double Total = 0.0;
boolean esConstante = false;
double numConstante = 0.0;
int opConstante = OP_NADA;

public void init() {
BotonCalculadora bot0,bot1,bot2,bot3,bot4,bot5,bot6,bot7,bot8,bot9;
BotonCalculadora botDecimal,botSuma,botResta;
BotonCalculadora botMult,botDiv,botIgual,botBorraC,botBorraAC;

// No utilizamos ningn la layout porque vamos a colocar
// los botones y el campo de texto para mostrar el resultado
// de las operaciones, en posiciones fijas
setLayout( null );
setFont( new Font( "Helvetica",Font.PLAIN,14 ) );
setBackground( new Color( 0x66,0xA2,0xD4 ) );

// Pintamos los botones de los numeros
bot0 = new BotonCalculadora( "0",OP_NADA,0 );
add( bot0 );
bot0.reshape( 8,144,96,24 );
bot1 = new BotonCalculadora( "1",OP_NADA,1 );
add( bot1 );
bot1.reshape( 8,112,40,24 );
bot2 = new BotonCalculadora( "2",OP_NADA,2 );
add( bot2 );
bot2.reshape( 64,112,40,24 );
bot3 = new BotonCalculadora( "3",OP_NADA,3 );
add( bot3 );
bot3.reshape( 120,112,40,24 );
bot4 = new BotonCalculadora( "4",OP_NADA,4 );
add( bot4 );
bot4.reshape( 8,80,40,24 );
bot5 = new BotonCalculadora( "5",OP_NADA,5 );
add( bot5 );
bot5.reshape( 64,80,40,24 );
bot6 = new BotonCalculadora( "6",OP_NADA,6 );
add( bot6 );
bot6.reshape( 120,80,40,24 );
bot7 = new BotonCalculadora( "7",OP_NADA,7 );
add( bot7 );
bot7.reshape( 8,48,40,24 );
bot8 = new BotonCalculadora( "8",OP_NADA,8 );
add( bot8 );
bot8.reshape( 64,48,40,24 );
bot9 = new BotonCalculadora( "9",OP_NADA,9 );
add( bot9 );
bot9.reshape( 120,48,40,24 );

// Pintamos los botones que nos van a permitir realizar las
// operaciones soportadas poe esta mini-calculadora
botDecimal = new BotonCalculadora( "",OP_NADA,PUNTO_DECIMAL );
add( botDecimal );
botDecimal.reshape( 120,144,40,24 );
botSuma = new BotonCalculadora( "+",OP_SUMA,0 );
add( botSuma );
botSuma.reshape( 176,112,40,56 );
botResta = new BotonCalculadora( "-",OP_RESTA,0 );
add( botResta );
botResta.reshape( 232,112,40,24 );
botMult = new BotonCalculadora( "*",OP_MULT,0 );
add( botMult );
botMult.reshape( 176,80,40,24 );
botDiv = new BotonCalculadora( "/",OP_DIV, 0);
add( botDiv );
botDiv.reshape( 176,48,40,24 );
botIgual = new BotonCalculadora( "=",OP_IGUAL,0 );
add( botIgual );
botIgual.reshape( 232,144,40,24 );
botBorraC = new BotonCalculadora( "C",OP_BORRAR_C,0 );
add( botBorraC );
botBorraC.reshape( 232,48,40,24 );
botBorraAC = new BotonCalculadora( "AC",OP_BORRAR_AC,0 );
add( botBorraAC );
botBorraAC.reshape( 232,80,40,24 );

// Pintamos el campo de texto en que vamos a reflejar lo que se
// se va introduciendo y el resultado de las operaciones
pantallita = new TextField( "0",80 );
pantallita.setEditable( false );
add( pantallita );
pantallita.reshape( 48,8,184,31 );
String unaDecima = ( new Double(0.1) ).toString();
cadDecimal =
unaDecima.substring( unaDecima.length()-2 ).substring( 0,1 );
}


public static void main( String args[] ) {
Frame f = new Frame( "Calculadora Java" );
Calculadora c = new Calculadora();

c.init();
f.add( "Center",c );
f.pack();
f.resize( 395,181 );
f.show();
}


public void anadir( int valor ) {
String digito;

// Controlamos el punto decimal, para que si es lo primero que se
// pulsa, desplazar un cero a la izquierda, y si se pulsa cuando
// ya estamos en un numero decimal, no hacerle caso
if( valor == PUNTO_DECIMAL )
if( !esDecimal )
{
if( nuevoNumero )
{
pantallita.setText( "0" );
nuevoNumero = false;
}
esDecimal = true;
digito = cadDecimal;
}
else
return;
else
digito = ( new Integer(valor) ).toString();

// Si tenemos que presentar un numero nuevo, porque estemos ya en
// otra operacion, borramos antes la pantallaita
if( nuevoNumero )
{
pantallita.setText( digito );
if( valor != 0 )
nuevoNumero = false;
}
else
pantallita.setText( pantallita.getText() + digito );

repaint();
}


// Ejecuta la operacion que indica el operador del boton que se
// haya pulsado
public void haceOperacion( int nuevoOperador ) {
double numero;

numero = ( new Double( pantallita.getText() ) ).doubleValue();
switch( nuevoOperador )
{
case OP_SUMA:
case OP_RESTA:
case OP_MULT:
case OP_DIV:
if( nuevoNumero )
{
if( nuevoOperador == operador && !esConstante )
{
esConstante = true;
numConstante = numero;
opConstante = nuevoOperador;
}
else
esConstante = false;
}
else
esConstante = false;
case OP_IGUAL:
if( !nuevoNumero || esOperadorIgual( nuevoOperador ) )
{
if( esConstante )
{
Total = numConstante;
operador = opConstante;
}

// Controla los operadores de operaciones
// matematicas
switch( operador )
{
case OP_SUMA:
Total = Total + numero;
break;
case OP_RESTA:
Total = Total - numero;
break;
case OP_MULT:
Total = Total * numero;
break;
case OP_DIV:
Total = Total / numero;
break;
case OP_IGUAL:
case OP_NADA:
Total = numero;
break;
}

// Presenta el resultado del tecleo en la pantalla
pantallita.setText(( new Double(Total) ).toString());
}
operador = nuevoOperador;
nuevoNumero = true;
esDecimal = false;
break;
}

// Controla los operadores de borrado tanto el Clear como el
// AllClear
switch( nuevoOperador )
{
// Borra el numero y cancela la operacion en curso
// solamente
case OP_BORRAR_C:
numero = 0.0;
pantallita.setText( "0" );
if( esOperadorIgual( operador ) )
Total = numero;
nuevoNumero = true;
esDecimal = false;
break;
// Borra todas las operaciones y numeros, lo deja
// todo a cero
case OP_BORRAR_AC:
pantallita.setText( "0" );
operador = OP_NADA;
nuevoNumero = true;
esDecimal = false;
Total = 0.0;
esConstante = false;
break;
}
}


// Comprueba si es el operador igual, para presentar resultado
protected boolean esOperadorIgual( int oper ) {
return( oper == OP_IGUAL );
}
}


// Esta clase se utiliza para pintar cada uno de los botones que van
// a conformar la calculadora
class BotonCalculadora extends Button {
int operador;
int bvalor;

BotonCalculadora( String texto, int oper, int valor ) {
super( texto );
operador = oper;
bvalor = valor;
}


public boolean action( Event evt, Object arg ) {
Calculadora par = ( Calculadora )getParent();

// Si no se tiene ninguna operacion matematica asociada, solamente
// se a�de el numero a la pantallita, y si ya es una
// operacion, entonces se hace y se presenta el resultado
if( operador == par.OP_NADA )
par.anadir( bvalor );
else
par.haceOperacion( operador );

return( true );
}
}

//--------------------------------------- Final del fichero Calculadora.java
Anónimo dijo…
hola, oie tengo el codigo de una calculadora en java tmb y ocupo que a la hora de dividir un numero entre cero me aparesca un mensaje en el cuadro te texto que diga "accion invalida" normalmente cuando se hace esa operacion aparece en el cuadro de texto "infinity".
quien me podria ayudar?? soy nuevo en java.
mi correo es sergio_cg82@hotmail.com
Amey dijo…
Tambien soy nuevo en Java (y en la programacion :P). Dejo la calculadora que he hecho, quiza a algun otro novato le sirva... Ss

--------------------------------------

/*
* Ventana.java
*
* Created on 12 de noviembre de 2007, 12:07 AM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

import java.awt.*;
import java.awt.event.*;

/**
*
* @author Amey/CAC
*/

public class Ventana {

//Defino los objetos a utilizar en la construccion de la ventana
//Defino las variables a utilizar en los distintos calculos matematicos

private Frame frm;
private Panel p1,p2,p3,p4,p5,p6;
public TextField tf1;
private Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b0,bsuma,
bresta,bdivi,bmulti,bac,bigual,bpt,bmm,bsen,
bcos, btan, braiz, blog, bpot;
private Checkbox cb1,cb2;
private CheckboxGroup cbg;
double valor1;
double valor2;
double resultado;
int operador;
int cuenta=0;
int cuenta1=0;
double mm=0;


public void CrearVentana(){
p1=new Panel();
p2=new Panel();
p3=new Panel();
p4=new Panel();
p5=new Panel();
p6=new Panel();
tf1=new TextField (25);
tf1.setEditable(true);

b1=new Button("1");
b2=new Button("2");
b3=new Button("3");
b4=new Button("4");
b5=new Button("5");
b6=new Button("6");
b7=new Button("7");
b8=new Button("8");
b9=new Button("9");
b0=new Button("0");
bpt=new Button(".");
bmm=new Button("+/-");

bsen=new Button("sen");
bcos=new Button("cos");
btan=new Button("tan");
braiz=new Button("Rz");
blog=new Button("log");
bpot=new Button("x*Y");

bsuma=new Button("+");
bsuma.setEnabled(true);
bresta=new Button("-");
bresta.setEnabled(true);
bdivi=new Button("%");
bdivi.setEnabled(true);
bmulti=new Button("x");
bmulti.setEnabled(true);

bac=new Button("AC");
bac.setEnabled(true);
bac.setForeground(Color.red);
bigual=new Button("ENTER");
bigual.setEnabled(true);

cbg=new CheckboxGroup();
cb1=new Checkbox ("Comun", cbg, true);
cb2=new Checkbox ("Cientifica", cbg, false);

p1.setLayout(new FlowLayout());
p2.setLayout(new FlowLayout());
p3.setLayout(new GridLayout(4,3));
p4.setLayout(new GridLayout(4,0));
p6.setLayout(new GridLayout(2,3));

p2.add(tf1);
p3.add(b1);
p3.add(b2);
p3.add(b3);
p3.add(b4);
p3.add(b5);
p3.add(b6);
p3.add(b7);
p3.add(b8);
p3.add(b9);
p3.add(bpt);
p3.add(b0);
p3.add(bmm);
p4.add(bsuma);
p4.add(bresta);
p4.add(bdivi);
p4.add(bmulti);
p4.add(bac);
p4.add(bigual);
p5.add(cb1);
p5.add(cb2);
p6.add(bsen);
p6.add(bcos);
p6.add(btan);
p6.add(braiz);
p6.add(blog);
p6.add(bpot);

p1.add(p2);
p1.add(p3);
p1.add(p4);
p1.add(p5);

frm.add(p1);

//Agrego a la ventana el metodo para cerrarla

frm.addWindowListener(new ManejadorVentana());
//Agrego los manejadores de los botones de teclado

b1.addActionListener(new Mb1());
b2.addActionListener(new Mb2());
b3.addActionListener(new Mb3());
b4.addActionListener(new Mb4());
b5.addActionListener(new Mb5());
b6.addActionListener(new Mb6());
b7.addActionListener(new Mb7());
b8.addActionListener(new Mb8());
b9.addActionListener(new Mb9());
b0.addActionListener(new Mb0());



//Agrego los manejadores de los botones de operaciones

bsuma.addActionListener(new MSuma());
bresta.addActionListener(new MResta());
bmulti.addActionListener(new MMulti());
bdivi.addActionListener(new MDivi());
bigual.addActionListener(new MIgual());
bac.addActionListener(new MAC());
bpt.addActionListener(new MPT());
bmm.addActionListener(new MMM());

cb1.addItemListener( new MCB());
cb2.addItemListener( new MCB());

bsen.addActionListener(new Msen());
bcos.addActionListener(new Mcos());
btan.addActionListener(new Mtan());
braiz.addActionListener(new Mraiz());
blog.addActionListener(new Mlog());
bpot.addActionListener(new Mpot());

}

//Construccion de la ventana

public Ventana() {
VentanaComun();
}

public void VentanaComun(){
frm=new Frame ("Amey`s Calc 2.0.1/CAC");
frm.setBounds(200,200,220,220);
frm.setResizable(false);
CrearVentana();
frm.setVisible(true);

}

public void VentanaCientifica() {

frm=new Frame ("Amey`s Calc 2.0.1/CAC");
frm.setBounds(200,200,220,265);
frm.setResizable(false);
CrearVentana();
cb2.setState(true);
p1.add(p6);
frm.setVisible(true);

}

//Apreto un boton, lo pasa al TextField!
public void ApretoBoton (int botonApretado){
if (cuenta==1){
tf1.setText("");
cuenta=0;
}
if (cuenta1==1){
cuenta1=2;
}
tf1.setText(tf1.getText()+ botonApretado);
}

public void ApretoIgual (){
valor2=Double.parseDouble(tf1.getText());
switch(operador){
case 1:
resultado=valor1+valor2;
tf1.setText(Double.toString(resultado));
break;
case 2:
resultado=valor1-valor2;
tf1.setText(Double.toString(resultado));
break;
case 3:
resultado=valor1*valor2;
tf1.setText(Double.toString(resultado));
break;
case 4:
if (valor2==0){
tf1.setText("Volve a la escuela!!!") ;
}
else{
resultado=valor1/valor2;
tf1.setText(Double.toString(resultado));
}
break;
}
cuenta=1;
}


public void Cuentas(int op){
if (cuenta1==0){
cuenta1=1;
}
if (cuenta1==2){
ApretoIgual();
cuenta1=1;
}
valor1=Double.parseDouble(tf1.getText());
operador=op;
cuenta=1;
}

public void Trigo (int op){
switch (op){
case 5:
tf1.setText(Double.toString(Math.sin(Math.toRadians(Double.parseDouble(tf1.getText())))));
cuenta=1;
break;
case 6:
tf1.setText(Double.toString(Math.cos(Math.toRadians(Double.parseDouble(tf1.getText())))));
cuenta=1;
break;
case 7:
tf1.setText(Double.toString(Math.tan(Math.toRadians(Double.parseDouble(tf1.getText())))));
cuenta=1;
break;
case 8:
if ((Double.parseDouble(tf1.getText())<=0)){
tf1.setText("Volve a la escuela!!!");
}
else{
tf1.setText(Double.toString(Math.sqrt(Double.parseDouble(tf1.getText()))));
}
cuenta=1;
break;
case 9:
tf1.setText(Double.toString(Math.log10(Double.parseDouble(tf1.getText()))));
cuenta=1;
break;
case 10:
tf1.setText(Double.toString(Math.pow(valor1, valor2)));
cuenta=1;
break;

}
}

//Clases manejadoras de los eventos de teclado

private class Mb1 implements ActionListener{
public void actionPerformed (ActionEvent e){
ApretoBoton (1);
}
}
private class Mb2 implements ActionListener{
public void actionPerformed (ActionEvent e){
ApretoBoton (2);
}
}
private class Mb3 implements ActionListener{
public void actionPerformed (ActionEvent e){
ApretoBoton (3);
}
}
private class Mb4 implements ActionListener{
public void actionPerformed (ActionEvent e){
ApretoBoton (4);
}
}
private class Mb5 implements ActionListener{
public void actionPerformed (ActionEvent e){
ApretoBoton (5);
}
}
private class Mb6 implements ActionListener{
public void actionPerformed (ActionEvent e){
ApretoBoton (6);
}
}
private class Mb7 implements ActionListener{
public void actionPerformed (ActionEvent e){
ApretoBoton (7);
}
}
private class Mb8 implements ActionListener{
public void actionPerformed (ActionEvent e){
ApretoBoton (8);
}
}
private class Mb9 implements ActionListener{
public void actionPerformed (ActionEvent e){
ApretoBoton (9);
}
}
private class Mb0 implements ActionListener{
public void actionPerformed (ActionEvent e){
ApretoBoton (0);
}
}


//Clases manejadoras de las distintas operaciones

private class ManejadorVentana extends WindowAdapter{
public void windowClosing (WindowEvent e){
frm.dispose();
System.exit(0);
}
}

private class MSuma implements ActionListener{
public void actionPerformed (ActionEvent e){
Cuentas(1);
}
}

private class MResta implements ActionListener{
public void actionPerformed (ActionEvent e){
Cuentas(2);
}
}

private class MMulti implements ActionListener{
public void actionPerformed (ActionEvent e){
Cuentas(3);
}
}

private class MDivi implements ActionListener{
public void actionPerformed (ActionEvent e){
Cuentas (4);
}
}

private class Msen implements ActionListener{
public void actionPerformed (ActionEvent e){
Trigo (5);
}
}
private class Mcos implements ActionListener{
public void actionPerformed (ActionEvent e){
Trigo (6);
}
}
private class Mtan implements ActionListener{
public void actionPerformed (ActionEvent e){
Trigo (7);
}
}
private class Mraiz implements ActionListener{
public void actionPerformed (ActionEvent e){
Trigo (8);
}
}
private class Mlog implements ActionListener{
public void actionPerformed (ActionEvent e){
Trigo (9);
}
}
private class Mpot implements ActionListener{
public void actionPerformed (ActionEvent e){
Trigo (10);
}
}
private class MIgual implements ActionListener{
public void actionPerformed (ActionEvent e){

ApretoIgual ();

}
}

private class MAC implements ActionListener{
public void actionPerformed (ActionEvent e){

valor1=0;
valor2=0;
resultado=0;
tf1.setText("");
cuenta=1;
}
}
private class MPT implements ActionListener{
public void actionPerformed (ActionEvent e){
tf1.setText(tf1.getText()+ ".");
}
}
private class MMM implements ActionListener{
public void actionPerformed (ActionEvent e){
mm=Double.parseDouble(tf1.getText());
tf1.setText(Double.toString(mm*(-1)));
}
}

private class MCB implements ItemListener{
public void itemStateChanged( ItemEvent e ){
Checkbox aux = cbg.getSelectedCheckbox();
if (aux.getLabel()=="Cientifica"){
frm.dispose();
VentanaCientifica();
}
else {
frm.dispose();
VentanaComun();
}
}
}


}
Gustavo Delgado dijo…
gracias por los comentarios chicos, y con respecto a eso de division por cero, depende de lo que quieras hacer, si necesitas saber cuando se produce la division por cero y tratarla, mi consejo es que uses manejo de errores mediante TRY,CATCH, y que busques el tipo de excepcion, sino me equivoco debe ser una NUMBERFORMATEXCEPTION, eso si , tu clase debes declararla throws Exception.
Y gracias Amey por subir tu calculadora, la echare correr hoy para ver que tal =).
Saludos sigan visitando, se vienen mas actualizaciones.

Entradas más populares de este blog

Automatas Finitos Deterministas en Java

Hola, uhmmmm hace tiempo que no actualizaba esto!, pero ya ven llegue con mas codigos y recargado :D. Bueno les contare un poco sobre este programita que no es la gran cosa, pero tiene su estilo, es un programa que acepta alguna palabra y verifica si pertenece a un Automata Finito Determinista agregado anteriormente con sus transiciones y estados inicial y finales. Aqui un screenshot con la ventana principal. En si el programa recive el estado inicial, y uno o mas estados finales. A continuacion vienen 3 JTextField que reciven las transiciones y se va creando una tabla dinamica al la derecha de la ventana con las transiciones y su simbolo asociado. Bueno este software esta escrito en Java usando listas enlazadas y todo, es bastante sencillo, mas que nada cabe destacar la interfaz grafica que le hice, quedo bonita, lo mejor es siempre hacer parecer lo menos posible a java. Saludos y aqui los ultimos screenshot. Descargar AFDTesterV1.0

Tutorial Mysql-php ejemplo Web

DESDE CERO Bienvenidos a este mini-tutorial, orientado a aquellos que quieren, “por fin” lanzarse en el desarrollo web, y en verdad están totalmente abrumados con tanta información y no saben por donde partir, por ende, no es de alto nivel técnico, mas bien conceptual pero aplicado con ejemplos concretos y prácticos. Ya sabiendo a lo que vas, dejo los links para que puedas descargar todo lo necesario. Lista de materiales - AppServ . - Macromedia Dreamweaver . - Mozilla Firefox con los siguientes Plugins: Firebug y FireFtp . Para descargar tutorial click aqui . Un screenshoot de los resultados.