|
El siguiente ejemplo es una calculadora basada en el uso de Hisiuin. Existe manejo de eventos. import Hisiuin.*; public class Calculadora extends Wwindow{
private boolean flotante, reset; private float resultado; char op; public Calculadora(){ }
public void init(){ int borde[] = {5,5,5,5}; setSize(1,1,5,1);
put(1,1,new Wtextfield(" 0"),"visor");
// Hacemos que el visor no sea editable ((Wtextfield)get(1,1)).setEditable(false);
// Ponemos las teclas de la calculadora putButton(1,2,"1");
putButton(2,2,"2"); putButton(3,2,"3");
putButton(4,2,"+"); putButton(5,2,"I");
putButton(1,3,"4"); putButton(2,3,"5");
putButton(3,3,"6"); putButton(4,3,"-");
putButton(5,3,"C"); putButton(1,4,"7");
putButton(2,4,"8"); putButton(3,4,"9");
putButton(4,4,"/");
putButton(1,5,"0");
putButton(2,5,"="); putButton(3,5,".");
putButton(4,5,"*");
// se establece que ocupen todo el espacio de la celda
set(ALL, ALL, FILL, BOTH );
// se establece borde entre los widgets
set(ALL, ALL, BORDER, borde );
// se establece diferentes colores para las teclas
set(ALL, 3, FOREGROUND, BLUE ); set(ALL, 4, FOREGROUND, YELLOW );
set(ALL, 5, FOREGROUND, RED ); set(ALL, 6, FOREGROUND, GREEN );
set(ALL, 8, FOREGROUND, RED );
// se establece tipo de letra para todos de tipo courier y tamaño 24
set(ALL,ALL,FONT,new Wfont("courier",PLAIN,24));
flotante = false;
reset = false; op = ' '; debug(); }
// funcion que sirve para las operaciones. private float operar( float operando1, float operando2, char op ){
switch (op){ case '+' :
return (operando1 + operando2); case '-' :
return (operando1 - operando2); case '/' :
return (operando1 / operando2); case '*' :
return (operando1 * operando2); }
return(0); }
public void widgetAction( Wevent e){
// se procesa los diferentes llamados de las teclas de la calculadora. if (e.mSource.equals("I")){
System.exit(1); }
else if (e.mSource.equals("C")){
((Wtextfield)get(1,1)).setField(" 0");
flotante = false; resultado = 0;
op = ' '; }
else if (e.mSource.equals("+") || e.mSource.equals("*") || e.mSource.equals("-") ||
e.mSource.equals("/") || e.mSource.equals("=") ){
flotante = false; reset = true;
if (op != ' '){ resultado = operar( resultado,
(new Float( ((Wtextfield)get(1,1)).getField()) ).floatValue(), op );
((Wtextfield)get(1,1)).setField( (new Float( resultado ) ).toString() );
} else
resultado = (new Float( ((Wtextfield)get(1,1)).getField()) ).floatValue();
if (!e.mSource.equals("="))
op = ((e.mSource).toCharArray())[0]; else
op = ' '; }
else if (e.mSource.equals(".")){ if (reset == true){
reset = false;
((Wtextfield)get(1,1)).setField(" 0");
} if ( flotante == false ){
StringBuffer visor = new StringBuffer(((Wtextfield)get(1,1)).getField());
visor.append(e.mSource);
((Wtextfield)get(1,1)).setField(visor.substring(1));
flotante = true; }
} else if (e.mType.equals("Wbutton")){
if (reset == true){ reset = false;
((Wtextfield)get(1,1)).setField(" ");
} int i = (new Integer(e.mSource)).intValue();
switch(i){ case 0:
case 1: case 2:
case 3: case 4:
case 5: case 6:
case 7: case 8:
case 9:
if ( (((Wtextfield)get(1,1)).getField()).compareTo(" 0") == 0 ){
((Wtextfield)get(1,1)).setField(" " + i);
}
else{
StringBuffer visor = new StringBuffer(((Wtextfield)get(1,1)).getField());
visor.append(e.mSource);
((Wtextfield)get(1,1)).setField(visor.substring(1));
}
} } }
public static void main( String args[] ){ Calculadora e = new Calculadora(); }
}
El resultado es el siguiente: |