import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import java.applet.applet;
import javax.swing.*;
import javax.swing.border.*;
public class calculator extends japplet implements actionlistener
{
private final string[] keys={"7","8","9","/","sqrt",
"4","5","6","*","%",
"1","2","3","-","1/x",
"0","+/-",".","+","="
};
private final string[] command={"backspace","ce","c"};
private final string[] m={" ","mc","mr","ms","m+"};
private jbutton keys[]=new jbutton[keys.length];
private jbutton commands[]=new jbutton[command.length];
private jbutton m[]=new jbutton[m.length];
private jtextfield display =new jtextfield("0");
// public jtextfield sethorizontalalignment(int alignment);
// private jtextfield display.sethorizontalalignment(jtextfield.right)=new jtextfield("0");
private void setup()
{
display.sethorizontalalignment(jtextfield.right);
jpanel calckeys=new jpanel();
jpanel command=new jpanel();
jpanel calms=new jpanel();
calckeys.setlayout(new gridlayout(4,5,3,3));
command.setlayout(new gridlayout(1,3,3,3));
calms.setlayout(new gridlayout(5,1,3,3));
for(int i=0;i<keys.length;i++)
{
keys[i]=new jbutton(keys[i]);
calckeys.add(keys[i]);
keys[i].setforeground(color.blue);
}
keys[3].setforeground(color.red);
keys[4].setforeground(color.red);
keys[8].setforeground(color.red);
keys[9].setforeground(color.red);
keys[13].setforeground(color.red);
keys[14].setforeground(color.red);
keys[18].setforeground(color.red);
keys[19].setforeground(color.red);
for(int i=0;i<command.length;i++)
{
commands[i]=new jbutton(command[i]);
command.add(commands[i]);
commands[i].setforeground(color.red);
}
for(int i=0;i<m.length;i++)
{
m[i]=new jbutton(m[i]);
calms.add(m[i]);
m[i].setforeground(color.red);
}
jpanel panel1=new jpanel();
panel1.setlayout(new borderlayout(3,3));
panel1.add("north",command);
panel1.add("center",calckeys);
jpanel top=new jpanel();
top.setlayout(new borderlayout());
display.setbackground(color.white);
top.add("center",display);
getcontentpane().setlayout(new borderlayout(3,5));
getcontentpane().add("north",top);
getcontentpane().add("center",panel1);
getcontentpane().add("west",calms);
}
public void init()
{
setup();
for(int i=0;i<keys.length;i++)
{
keys[i].addactionlistener(this);
}
for(int i=0;i<command.length;i++)
{
commands[i].addactionlistener(this);
}
for(int i=0;i<m.length;i++)
{
m[i].addactionlistener(this);
}
display.seteditable(false);
}
public void actionperformed(actionevent e)
{
string label=e.getactioncommand();
// double zero=e.getactioncommand();
if(label=="c")
handlec();
else if(label=="backspace")
handlebackspace();
else if(label=="ce")
display.settext("0");
else if("0123456789.".indexof(label)>=0)
{handlenumber(label);
// handlezero(zero);
}
else
handleoperator(label);
}
private boolean firstdigit=true;
private void handlenumber(string key)
{
if(firstdigit)
display.settext(key);
else if((key.equals("."))&&(display.gettext().indexof(".")<0))
display.settext(display.gettext()+".");
else if(!key.equals("."))
display.settext(display.gettext()+key);
firstdigit=false;
}
//private void handlezero(string key)
//{
// if(!((double)display.settext(key))
// display.settext(0);
// }
private double number=0.0;
private string operator="=";
private void handleoperator(string key)
{
if(operator.equals("/"))
{
if(getnumberfromdisplay()==0.0)
display.settext("除数不能为零");
else
{
number/=getnumberfromdisplay();
long t1;
double t2;
t1=(long)number;
t2=number-t1;
if(t2==0)
display.settext(string.valueof(t1));
else
display.settext(string.valueof(number));
}
}
else if(operator.equals("1/x"))
{
if(number==0.0)
display.settext("零没有倒数");
else
{
number=1/number;
long t1;
double t2;
t1=(long)number;
t2=number-t1;
if(t2==0)
display.settext(string.valueof(t1));
else
display.settext(string.valueof(number));
}
}
else if(operator.equals("+"))
number+=getnumberfromdisplay();
else if(operator.equals("-"))
number-=getnumberfromdisplay();
else if(operator.equals("*"))
number*=getnumberfromdisplay();
else if(operator.equals("sqrt"))
{
number=math.sqrt(number);
}
else if(operator.equals("%"))
number=number/100;
else if(operator.equals("+/-"))
number=number*(-1);
else if(operator.equals("="))
number=getnumberfromdisplay();
long t1;
double t2;
t1=(long)number;
t2=number-t1;
if(t2==0)
display.settext(string.valueof(t1));
else
display.settext(string.valueof(number));
operator=key;
firstdigit=true;
}
private double getnumberfromdisplay()
{
return double.valueof(display.gettext()).doublevalue();
}
private void handlec()
{
display.settext("0");
firstdigit=true;
operator="=";
}
private void handlebackspace()
{
string text=display.gettext();
int i=text.length();
if(i>0)
{
text=text.substring(0,i-1);
if(text.length()==0)
{
display.settext("0");
firstdigit=true;
operator="=";
}
else
display.settext(text);
}
}
public static void main(string args[])
{
jframe f=new jframe();
calculator calculator1=new calculator();
calculator1.init();
f.getcontentpane().add("center",calculator1);
f.setvisible(true);
f.setbounds(300,200,380,245);
f.setbackground(color.light_gray);
f.validate();
f.setresizable(false);
f.addwindowlistener(new windowadapter()
{
public void windowclosing(windowevent e)
{
system.exit(0);
}
});
f.settitle("计算器");
}
}
闽公网安备 35060202000074号