You are on page 1of 7

Una calculadora en Java

Este applet crea una calculadora que funciona perfectamente en una p�gina web y
con cualquier browser.

import java.util.*;
import java.awt.*;
import java.applet.*;

/**
* Calculadora sencilla
*/
public class Calc extends Applet {

Display display = new Display();

/**
* inicializa el applet Calc
*/
public void init () {

setLayout(new BorderLayout());
Keypad keypad = new Keypad();

add ("North", display);


add ("Center", keypad);
}

/**
* manipulador para las funciones de la calculadora.
*/
public boolean action (Event ev, Object arg) {

if (ev.target instanceof Button) {

String label = (String)arg;


if (label.equals("C")) {
display.Clear ();
return true;
}
else if (label.equals(".")) {
display.Dot ();
return true;
}
else if (label.equals("+")) {
display.Plus ();
return true;
}
else if (label.equals("-")) {
display.Minus ();
return true;
}
else if (label.equals("x")) {
display.Mul ();
return true;
}
else if (label.equals("/")) {
display.Div ();
return true;
}
else if (label.equals("+/-")) {
display.Chs ();
return true;
}
else if (label.equals("=")) {
display.Equals ();
return true;
}
else {
display.Digit (label);
return true;
}
}
return false;
}

/**
* Esto permite que la clase se use como applet o como aplicaci�n independiente
*/
public static void main (String args[]) {

Frame f = new Frame ("Calculator");


Calc calc = new Calc ();

calc.init ();

f.resize (210, 200);


f.add ("Center", calc);
f.show ();
}
}

/* -------------------------------------------------- */

/**
* Keypad manipula la entrada de datos y la visualizaci�n de resultados
*/
class Keypad extends Panel {

/**
* inicializa keypad, a�ade los botones, establece los colores, etc.
*/
Keypad (){

Button b = new Button();


Font font = new Font ("Times", Font.BOLD, 14);
Color functionColor = new Color (255, 255, 0);
Color numberColor = new Color (0, 255, 255);
Color equalsColor = new Color (0, 255, 0);
setFont (font);
b.setForeground (Color.black);

add (b = new Button ("7"));


b.setBackground (numberColor);
add (b = new Button ("8"));
b.setBackground (numberColor);
add (b = new Button ("9"));
b.setBackground (numberColor);
add (b = new Button ("/"));
b.setBackground (functionColor);

add (b = new Button ("4"));


b.setBackground (numberColor);
add (b = new Button ("5"));
b.setBackground (numberColor);
add (b = new Button ("6"));
b.setBackground (numberColor);
add (b = new Button ("x"));
b.setBackground (functionColor);

add (b = new Button ("1"));


b.setBackground (numberColor);
add (b = new Button ("2"));
b.setBackground (numberColor);
add (b = new Button ("3"));
b.setBackground (numberColor);
add (b = new Button ("-"));
b.setBackground (functionColor);

add (b = new Button ("."));


b.setBackground (functionColor);
add (b = new Button ("0"));
b.setBackground (numberColor);
add (b = new Button ("+/-"));
b.setBackground (functionColor);
add (b = new Button ("+"));
b.setBackground (functionColor);

add (b = new Button ("C"));


b.setBackground (functionColor);
add (new Label (""));
add (new Label (""));
add (b = new Button ("="));
b.setBackground (equalsColor);

setLayout (new GridLayout (5, 4, 4, 4));


}

/* -------------------------------------------------- */

/**
* la clase Display gestiona la visualizaci�n del resultado calculado y tambi�n
* implementa las tecla de fucni�n de la calculadora
*/
class Display extends Panel{

double last = 0;
int op = 0;
boolean equals = false;
int maxlen = 10;
String s;
Label readout = new Label("");
/**
* Inicializa display
*/
Display () {

setLayout(new BorderLayout());
setBackground (Color.red);
setFont (new Font ("Courier", Font.BOLD + Font.ITALIC, 30));
readout.setAlignment(1);
add ("Center",readout);
repaint();
Clear ();
}

/**
* manipulaci�n del pulsado de un d�gito
*/
void Digit (String digit) {
checkEquals ();

/*
* quita los ceros precedentes
*/
if (s.length () == 1 && s.charAt (0) == '0' && digit.charAt (0) != '.')
s = s.substring (1);

if (s.length () < maxlen)


s = s + digit;
showacc ();
}

/**
* manipulaci�n del punto decimal
*/
void Dot () {
checkEquals ();

/*
* ya tiene un '.'
*/
if (s.indexOf ('.') != -1)
return;

if (s.length () < maxlen)


s = s + ".";
showacc ();
}

/**
* si el usuario pulsa = sin haber pulsado antes un operador
* (+,-,x,/), pone cero en la visualizaci�n
*/
private void checkEquals () {
if (equals == true) {
equals = false;
s = "0";
}
}

/**
* operador suma para uso posterior.
*/
void Plus () {
op = 1;
operation ();
}

/**
* operador resta para uso posterior.
*/
void Minus () {
op = 2;
operation ();
}

/**
* operador multiplicaci�n para uso posterior.
*/
void Mul () {
op = 3;
operation ();
}

/**
* operador divisi�n para uso posterior.
*/
void Div () {
op = 4;
operation ();
}

/**
* Interpreta el valor de la visualizaci�n como double y lo almacena
* para uso posterior
*/
private void operation () {
if (s.length () == 0) return;

Double xyz = Double.valueOf (s);


last = xyz.doubleValue ();

equals = false;
s = "0";
}
/**
* invalida el valor actual y revisualiza.
*/
void Chs () {
if (s.length () == 0) return;

if (s.charAt (0) == '-') s = s.substring (1);


else s = "-" + s;

showacc ();
}
/**
* termina el �ltimo c�lculo y visualiza el resultado
*/
void Equals () {
double acc;

if (s.length () == 0) return;
Double xyz = Double.valueOf (s);
switch (op) {
case 1:
acc = last + xyz.doubleValue ();
break;

case 2:
acc = last - xyz.doubleValue ();
break;

case 3:
acc = last * xyz.doubleValue ();
break;

case 4:
acc = last / xyz.doubleValue ();
break;

default:
acc = 0;
break;
}

s = new Double (acc).toString ();


showacc ();
equals = true;
last = 0;
op = 0;
}

/**
* limpia la visualizaci�n y el �ltimo valor interno
*/
void Clear () {
last = 0;
op = 0;
s = "0";
equals = false;
showacc ();
}

/**
* pide que se repinte el resultado
*/
private void showacc () {
readout.setText(s);
repaint ();
}
}

You might also like