Professional Documents
Culture Documents
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 {
/**
* inicializa el applet Calc
*/
public void init () {
setLayout(new BorderLayout());
Keypad keypad = new Keypad();
/**
* manipulador para las funciones de la calculadora.
*/
public boolean action (Event ev, Object arg) {
/**
* Esto permite que la clase se use como applet o como aplicaci�n independiente
*/
public static void main (String args[]) {
calc.init ();
/* -------------------------------------------------- */
/**
* 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 (){
/* -------------------------------------------------- */
/**
* 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);
/**
* manipulaci�n del punto decimal
*/
void Dot () {
checkEquals ();
/*
* ya tiene un '.'
*/
if (s.indexOf ('.') != -1)
return;
/**
* 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;
equals = false;
s = "0";
}
/**
* invalida el valor actual y revisualiza.
*/
void Chs () {
if (s.length () == 0) return;
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;
}
/**
* 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 ();
}
}