private void resultado(double
x)
{
valor = x;
displayMemo = x + "" +
'\n' + " = " + '\n' +
display.getText();
display.setText(displayMemo);
}
private void update (double
x)
{
if (x ==
-1)
{
displayMemo =
"";
x = 0;
}
valor =
x;
display.setText(String.valueOf(valor) + '\n' +
displayMemo);;
}
public void actionPerformed (ActionEvent
ev)
{
String label = ev.getActionCommand();
//getActionCommand();
char k =
label.charAt(0);
switch(k)
{
case
'.':
if
(novoNumero)
{
valor =
0;
novoNumero =
false;
}
if (decimal ==1) // evita duplo
uso
decimal =
10;
break;
case '0': case '1': case
'2':
case '3': case '4': case
'5':
case '6': case '7': case '8': case
'9':
// bug: digitar 0.000...x mostra
apenas
// "0" enquanto x != '0' nao e'
digitado
if
(novoNumero)
{
valor =
0;
novoNumero =
false;
}
if (decimal >
1)
{
valor = valor + (k -
'0')/decimal;
decimal
*=10;
}
else
valor = valor * 10 + (k -
'0');
update(valor);
break;
case
'C':
update
(-1);
decimal =
1;
break;
case
'+': case '-': case '*': case '/':
ultimaOp = k; novoNumero =
true;
ultimoValor =
valor;
ultimoIgual =
false;
decimal =
1;
operacao(k +
"");
break;
case
'=':
if (!
ultimoIgual)
{
// para repetir ultima operacao, troca ultimo valor com
valor
double ultimo =
ultimoValor;
ultimoValor =
valor;
valor =
ultimo;
}
switch
(ultimaOp)
{
case
'+':
resultado (valor +
ultimoValor);
break;
case
'-':
resultado (valor -
ultimoValor);
break;
case
'*':
resultado (valor *
ultimoValor);
break;
case '/': // falta testar div por
0
resultado (valor /
ultimoValor);
break;
}
novoNumero =
true;
ultimoIgual =
true;
decimal = 1;
}
}
}
public class CalcPad11 extends
java.applet.Applet
{
protected TextArea
display;
private void setButton(Container
where,
GridBagLayout
m,
GridBagConstraints
c,
String
name,
int x, int
y,
int w, int
h,
CalcListener c1)
{
c.gridx = x; c.gridy =
y;
c.gridwidth = w; c.gridheight
= h;
c.weightx = c.weighty =
1.0;
Button b = new Button
(name);
m.setConstraints(b,c);
where.add(b);
b.addActionListener(c1);
}
public void init()
{
display = new
TextArea(12,1);
display.setForeground(Color.blue);
display.setBackground(Color.white);
display.setEditable(false);
setLayout (new BorderLayout
());
add
("North",display);
Panel
keypad;
add("Center", (keypad =
new Panel()));
GridBagConstraints
c;
GridBagLayout manager = new
GridBagLayout();
keypad.setLayout (manager);
c=new
GridBagConstraints();
c.fill =
GridBagConstraints.BOTH;
CalcListener c1 = new
CalcListener(display);
setButton
(keypad,manager,c,"C",0,0,1,1,c1);
setButton
(keypad,manager,c,"/",1,0,1,1,c1);
setButton
(keypad,manager,c,"*",2,0,1,1,c1);
setButton
(keypad,manager,c,"-",3,0,1,1,c1);
setButton
(keypad,manager,c,"7",0,1,1,1,c1);
setButton
(keypad,manager,c,"8",1,1,1,1,c1);
setButton
(keypad,manager,c,"9",2,1,1,1,c1);
setButton
(keypad,manager,c,"4",0,2,1,1,c1);
setButton
(keypad,manager,c,"5",1,2,1,1,c1);
setButton
(keypad,manager,c,"6",2,2,1,1,c1);
setButton
(keypad,manager,c,"1",0,3,1,1,c1);
setButton
(keypad,manager,c,"2",1,3,1,1,c1);
setButton
(keypad,manager,c,"3",2,3,1,1,c1);
setButton
(keypad,manager,c,"+",3,1,1,2,c1);
setButton
(keypad,manager,c,"=",3,3,1,2,c1);
setButton
(keypad,manager,c,"0",0,4,2,1,c1);
setButton (keypad,manager,c,".",2,4,1,1,c1);
}
}