计算器的Java源代码
ëV ï??import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
public class Calculator extends JFrame implements ActionListener{
JPanel panel1=new JPanel();
JPanel panel2=new JPanel();
JTextField tfMemory=new JTextField();
JTextField tfResult=new JTextField();
//å?šä?‰æ??å??按é??
JButton button_0=new JButton();
JButton button_1=new JButton();
JButton button_2=new JButton();
JButton button_3=new JButton();
JButton button_4=new JButton();
JButton button_5=new JButton();
JButton button_6=new JButton();
JButton button_7=new JButton();
JButton button_8=new JButton();
JButton button_9=new JButton();
//å?šä?‰å››åˆ?è? ç??按é??
JButton button_add=new JButton();
JButton button_sub=new JButton();
JButton button_mul=new JButton();
JButton button_div=new JButton();
JButton button_dot=new JButton();
JButton button_equal=new JButton();
//å?šä?‰ä?‰è??å‡,æ??按é??
JButton button_sin=new JButton();
JButton button_cos=new JButton();
JButton button_tan=new JButton();
//å?šä?‰å…?ä??è? ç??按é??
JButton button_sqrt=new JButton();
JButton button_daoshu=new JButton();
JButton button_pow=new JButton();
//å?šä?‰åŸŸå??å‚?å??ç›?å…?的按é??
JButton button_MC=new JButton();
JButton button_MR=new JButton();
JButton button_MS=new JButton();
JButton button_MPlus=new JButton();
JButton button_MMinus=new JButton();
//å?šä?‰ä?,ä?ªå??æ??按é??
JButton button_PI=new JButton();
JButton button_E=new JButton();
//å?šä?‰ç?,å??é??å?Œæ?…é›?é??
JButton button_sign=new JButton();
JButton button_CE=new JButton();
//å?šä?‰å?ƒå??æ??å?
GridLayout grid1=new GridLayout();
GridBagLayout gridbag1=new GridBagLayout();
GridBagLayout gridbag2=new GridBagLayout();
//ä??å??æœ?è??ä??æ??è??ç??ç??
String recentOperation=null;
//ä??å??æœ?è??ä??æ??çš„è??ç??æ??æ ?
String recentNum=null;
//æ??è??å,?å‰?è??å…,çŠ?æ??﵌æ??é‡?æ??è??å…,è??æ??æ?,åœ?å??é??﵌é‡?æ??è??å…
?æ??ä?ºtrue
boolean isNew=true;
public Calculator(){
//ä?ºæŒ‰é??æ??册ç›?å??å??
button_0.addActionListener(this);
button_1.addActionListener(this);
button_2.addActionListener(this);
button_3.addActionListener(this);
button_4.addActionListener(this);
button_5.addActionListener(this);
button_6.addActionListener(this);
button_7.addActionListener(this);
button_8.addActionListener(this);
button_9.addActionListener(this);
button_add.addActionListener(this);
button_sub.addActionListener(this);
button_mul.addActionListener(this);
button_div.addActionListener(this);
button_dot.addActionListener(this);
button_equal.addActionListener(this);
button_sin.addActionListener(this);
button_cos.addActionListener(this);
button_tan.addActionListener(this);
button_sqrt.addActionListener(this);
button_daoshu.addActionListener(this);
button_pow.addActionListener(this);
button_MC.addActionListener(this);
button_MR.addActionListener(this);
button_MS.addActionListener(this);
button_MPlus.addActionListener(this);
button_MMinus.addActionListener(this);
button_PI.addActionListener(this);
button_E.addActionListener(this);
button_sign.addActionListener(this);
button_CE.addActionListener(this);
//è??ç,?按é??ç‰?å?•(å,?ä,?ã??é?œè‰?ã??内å??)
button_0.setFont(new Font("SansSerif",0,12));
button_0.setForeground(Color.blue);
button_0.setBorder(BorderFactory.createRaisedBevelBorder());
button_0.setText("0");
button_1.setFont(new Font("SansSerif",0,12));
button_1.setForeground(Color.blue);
button_1.setBorder(BorderFactory.createRaisedBevelBorder());
button_1.setText("1");
button_2.setFont(new Font("SansSerif",0,12));
button_2.setForeground(Color.blue);
button_2.setBorder(BorderFactory.createRaisedBevelBorder());
button_2.setText("2");
button_3.setFont(new Font("SansSerif",0,12));
button_3.setForeground(Color.blue);
button_3.setBorder(BorderFactory.createRaisedBevelBorder());
button_3.setText("3");
button_4.setFont(new Font("SansSerif",0,12));
button_4.setForeground(Color.blue);
button_4.setBorder(BorderFactory.createRaisedBevelBorder());
button_4.setText("4");
button_5.setFont(new Font("SansSerif",0,12));
button_5.setForeground(Color.blue);
button_5.setBorder(BorderFactory.createRaisedBevelBorder());
button_5.setText("5");
button_6.setFont(new Font("SansSerif",0,12));
button_6.setForeground(Color.blue);
button_6.setBorder(BorderFactory.createRaisedBevelBorder());
button_6.setText("6");
button_7.setFont(new Font("SansSerif",0,12));
button_7.setForeground(Color.blue);
button_7.setBorder(BorderFactory.createRaisedBevelBorder());
button_7.setText("7");
button_8.setFont(new Font("SansSerif",0,12));
button_8.setForeground(Color.blue);
button_8.setBorder(BorderFactory.createRaisedBevelBorder());
button_8.setText("8");
button_9.setFont(new Font("SansSerif",0,12));
button_9.setForeground(Color.blue);
button_9.setBorder(BorderFactory.createRaisedBevelBorder());
button_9.setText("9");
button_PI.setFont(new Font("SansSerif",0,12));
button_PI.setForeground(Color.blue);
button_PI.setBorder(BorderFactory.createRaisedBevelBorder());
button_PI.setText("Ï?");
button_E.setFont(new Font("SansSerif",0,12));
button_E.setForeground(Color.blue);
button_E.setBorder(BorderFactory.createRaisedBevelBorder());
button_E.setText("E");
button_add.setFont(new Font("SansSerif",0,12));
button_add.setForeground(Color.red);
button_add.setBorder(BorderFactory.createRaisedBevelBorder());
button_add.setText("+");
button_sub.setFont(new Font("SansSerif",0,12));
button_sub.setForeground(Color.red);
button_sub.setBorder(BorderFactory.createRaisedBevelBorder());
button_sub.setText("-");
button_mul.setFont(new Font("SansSerif",0,12));
button_mul.setForeground(Color.red);
button_mul.setBorder(BorderFactory.createRaisedBevelBorder());
button_mul.setText("*");
button_div.setFont(new Font("SansSerif",0,12));
button_div.setForeground(Color.red);
button_div.setBorder(BorderFactory.createRaisedBevelBorder());
button_div.setText("/");
button_sqrt.setFont(new Font("SansSerif",0,12));
button_sqrt.setForeground(Color.red);
button_sqrt.setBorder(BorderFactory.createRaisedBevelBorder());
button_sqrt.setText("sqrt");
button_daoshu.setFont(new Font("SansSerif",0,12));
button_daoshu.setForeground(Color.red);
button_daoshu.setBorder(BorderFactory.createRaisedBevelBorder());
button_daoshu.setText("1/x");
button_pow.setFont(new Font("SansSerif",0,12));
button_pow.setForeground(Color.red);
button_pow.setBorder(BorderFactory.createRaisedBevelBorder());
button_pow.setText("pow");
button_dot.setFont(new Font("SansSerif",0,12));
button_dot.setForeground(Color.red);
button_dot.setBorder(BorderFactory.createRaisedBevelBorder());
button_dot.setText(".");
button_equal.setFont(new Font("SansSerif",0,12));
button_equal.setForeground(Color.red);
button_equal.setBorder(BorderFactory.createRaisedBevelBorder());
button_equal.setText("=");
button_sin.setFont(new Font("SansSerif",0,12));
button_sin.setForeground(Color.red);
button_sin.setBorder(BorderFactory.createRaisedBevelBorder());
button_sin.setText("sin");
button_cos.setFont(new Font("SansSerif",0,12));
button_cos.setForeground(Color.red);
button_cos.setBorder(BorderFactory.createRaisedBevelBorder());
button_cos.setText("cos");
button_tan.setFont(new Font("SansSerif",0,12));
button_tan.setForeground(Color.red);
button_tan.setBorder(BorderFactory.createRaisedBevelBorder());
button_tan.setText("tan");
button_sign.setFont(new Font("SansSerif",0,12));
button_sign.setForeground(Color.red);
button_sign.setBorder(BorderFactory.createRaisedBevelBorder());
button_sign.setText("+/-");
button_MC.setFont(new Font("SansSerif",0,12));
button_MC.setForeground(Color.red);
button_MC.setBorder(BorderFactory.createRaisedBevelBorder());
button_MC.setText("MC");
button_MR.setFont(new Font("SansSerif",0,12));
button_MR.setForeground(Color.red);
button_MR.setBorder(BorderFactory.createRaisedBevelBorder());
button_MR.setText("MR");
button_MS.setFont(new Font("SansSerif",0,12));
button_MS.setForeground(Color.red);
button_MS.setBorder(BorderFactory.createRaisedBevelBorder());
button_MS.setText("MS");
button_MPlus.setFont(new Font("SansSerif",0,12));
button_MPlus.setForeground(Color.red);
button_MPlus.setBorder(BorderFactory.createRaisedBevelBorder());
button_MPlus.setText("M+");
button_MMinus.setFont(new Font("SansSerif",0,12));
button_MMinus.setForeground(Color.red);
button_MMinus.setBorder(BorderFactory.createRaisedBevelBorder());
button_MMinus.setText("M-");
button_CE.setFont(new Font("SansSerif",0,12));
button_CE.setForeground(Color.red);
button_CE.setBorder(BorderFactory.createRaisedBevelBorder());
button_CE.setToolTipText("");
button_CE.setText("CE");
//è??ç??ä??ä?ªæ?‡æœ?æ?†çš„ç‰?æ??
tfMemory.setBorder(BorderFactory.createLoweredBevelBorder());
tfMemory.setEditable(false);
tfMemory.setText("0");
tfMemory.setHorizontalAlignment(SwingConstants.RIGHT);
tfResult.setBorder(BorderFactory.createLoweredBevelBorder());
tfResult.setDisabledTextColor(Color.white);
tfResult.setEditable(false);
tfResult.setText("0");
tfResult.setHorizontalAlignment(SwingConstants.RIGHT);
//ç?Œé??çš„å?ƒå??
panel1.setLayout(gridbag1);
panel1.setPreferredSize(new Dimension(333,30));
panel1.add(tfResult,new
GridBagConstraints(1,0,1,1,0.0,0.0,GridBagConstraints.CENTER,GridBagConstraints.
NONE,new Insets(0,15,0,0),155,0));
panel1.add(tfMemory,new
GridBagConstraints(0,0,1,1,0.0,0.0,GridBagConstraints.CENTER,GridBagConstraints.
NONE,new Insets(0,0,0,0),66,0));
panel1.add(button_CE,new
GridBagConstraints(2,0,1,1,0.0,0.0,GridBagConstraints.EAST,GridBagConstraints.NO
NE,new Insets(0,15,0,4),24,0));
panel2.setBorder(BorderFactory.createRaisedBevelBorder());
grid1=new GridLayout(6,5);
grid1.setHgap(2);
grid1.setVgap(2);
panel2.setLayout(grid1);
//æ??åŠ æŒ‰é??
panel2.add(button_MC);
panel2.add(button_MR);
panel2.add(button_MS);
panel2.add(button_MPlus);
panel2.add(button_MMinus);
panel2.add(button_sin);
panel2.add(button_1);
panel2.add(button_2);
panel2.add(button_3);
panel2.add(button_add);
panel2.add(button_cos);
panel2.add(button_4);
panel2.add(button_5);
panel2.add(button_6);
panel2.add(button_sub);
panel2.add(button_tan);
panel2.add(button_7);
panel2.add(button_8);
panel2.add(button_9);
panel2.add(button_mul);
panel2.add(button_sqrt);
panel2.add(button_PI);
panel2.add(button_0);
panel2.add(button_E);
panel2.add(button_div);
panel2.add(button_pow);
panel2.add(button_daoshu);
panel2.add(button_dot);
panel2.add(button_equal);
panel2.add(button_sign);
this.getContentPane().setLayout(gridbag2);
this.getContentPane().add(panel2,new GridBagConstraints(0,1,1,1,1.0,1.0,GridBagConstraints.CENTER,
GridBagConstraints.HORIZONTAL,new Insets(1,0,1,4),190,15));
this.getContentPane().add(panel1,new GridBagConstraints(0,0,1,1,1.0,1.0,GridBagConstraints.CENTER,
GridBagConstraints.HORIZONTAL,new Insets(0,0,1,4),23,0));
this.setResizable(false);
this.setTitle("è??ç??å??");
//çª?å??事ä??é?‚é…?å??
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
//è??å??按é??事ä??å??çš„åŠ?ä,œ
public void actionPerformed(ActionEvent e){
if(e.getSource()==button_0){
if(tfResult.getText().equals("0"))
return;
//åˆ,æ??æ??é‡ æ??è??å…,è??æ??æ?,åœ?å??é??
if(!isNew)
tfResult.setText(tfResult.getText()+"0");
else
tfResult.setText("0");
isNew=false;
}
else if(e.getSource()==button_1){
if(!isNew)
tfResult.setText(tfResult.getText()+"1");
else
tfResult.setText("1");
isNew=false;
}
else if(e.getSource()==button_2){
if(!isNew)
tfResult.setText(tfResult.getText()+"2");
else
tfResult.setText("2");
isNew=false;
}
else if(e.getSource()==button_3){
if(!isNew)
tfResult.setText(tfResult.getText()+"3");
else
tfResult.setText("3");
isNew=false;
}
else if(e.getSource()==button_4){
if(!isNew)
tfResult.setText(tfResult.getText()+"4");
else
tfResult.setText("4");
isNew=false;
}
else if(e.getSource()==button_5){
if(!isNew)
tfResult.setText(tfResult.getText()+"5");
else
tfResult.setText("5");
isNew=false;
}
else if(e.getSource()==button_6){
if(!isNew)
tfResult.setText(tfResult.getText()+"6");
else
tfResult.setText("6");
isNew=false;
}
else if(e.getSource()==button_7){
if(!isNew)
tfResult.setText(tfResult.getText()+"7");
else
tfResult.setText("7");
isNew=false;
}
else if(e.getSource()==button_8){
if(!isNew)
tfResult.setText(tfResult.getText()+"8");
else
tfResult.setText("8");
isNew=false;
}
else if(e.getSource()==button_9){
if(!isNew)
tfResult.setText(tfResult.getText()+"9");
else
tfResult.setText("9");
isNew=false;
}
else if(e.getSource()==button_PI){
tfResult.setText(""+Math.PI);
isNew=true;
}
else if(e.getSource()==button_E){
tfResult.setText(""+Math.E);
isNew=true;
}
//å?šä?‰å››åˆ?è? ç??
else if(e.getSource()==button_add){
if((tfResult.getText()).equals(""))
return;
if(recentOperation!=null)
equalaction(e);
recentOperation="add";
recentNum=tfResult.getText();
isNew=true;
}
else if(e.getSource()==button_sub){
if((tfResult.getText()).equals(""))
return;
if(recentOperation!=null)
equalaction(e);
recentOperation="sub";
recentNum=tfResult.getText();
isNew=true;
}
else if(e.getSource()==button_mul){
if((tfResult.getText()).equals(""))
return;
if(recentOperation!=null)
equalaction(e);
recentOperation="mul";
recentNum=tfResult.getText();
isNew=true;
}
else if(e.getSource()==button_div){
if((tfResult.getText()).equals(""))
return;
if(recentOperation!=null)
equalaction(e);
recentOperation="div";
recentNum=tfResult.getText();
isNew=true;
}
//å?šä?‰å??æ??æ ?è? ç??
else if(e.getSource()==button_sqrt){
String showstr=tfResult.getText();
if(showstr.equals(""))
return;
double ishow=0;
try{
ishow=Double.parseDouble(showstr);
}
catch(NumberFormatException ee){
System.out.println("è??å…,æ??æ ?ä? å ˆæ??ﵕ");
tfResult.setText("è??å…,æ??æ??ä??å?ˆæ??﵌è??é‡?æ??è??å…,");
isNew=true;
return;
}
if(showstr.charAt(0)=='-'){
tfResult.setText("è?Ÿæ??ä??èƒ,åµ?æ ?å ?ï?•");
isNew=true;
}
else{
tfResult.setText(Double.toString(Math.sqrt(Double.parseDouble(tfResult.getTe
xt()))));
isNew=true;
}
}
//å?šä?‰æ?‚å??æ??è? ç??
else if(e.getSource()==button_daoshu){
String showstr=tfResult.getText();
if(showstr.equals(""))
return;
double ishow=0;
try{
ishow=Double.parseDouble(showstr);
}
catch(NumberFormatException ee){
System.out.println("è??å…,æ??æ??ä??å?ˆæ??ïµ?");
tfResult.setText("è??å…,æ??æ??ä??å?ˆæ??﵌è??é‡?æ??è??å…,");
isNew=true;
return;
}
if(showstr.charAt(0)=='0'){
tfResult.setText("0ä??èƒ,æ?‚å??æ??ïµ?");
isNew=true;
}
else{
isNew=true;
}
}
//å?šä?‰ä??æ??è? ç??
else if(e.getSource()==button_pow){
if((tfResult.getText()).equals(""))
return;
if(recentOperation!=null)
equalaction(e);
recentOperation="pow";
recentNum=tfResult.getText();
isNew=true;
}
else if(e.getSource()==button_dot){
if(tfResult.getText().indexOf(".")!=-1)
return;
if(!isNew&&tfResult.getText()!="")
tfResult.setText(tfResult.getText()+".");
else
tfResult.setText("0.");
}
else if(e.getSource()==button_equal){
equalaction(e);
}
//å?šä?‰ä?‰è??å‡,æ??è? ç??
else if(e.getSource()==button_sin){
String showstr=tfResult.getText();
if(showstr.equals(""))
return;
double ishow=0;
try{
ishow=Double.parseDouble(showstr);
}
catch(NumberFormatException ee){
System.out.println("è??å…,æ??æ??ä??å?ˆæ??ïµ?");
tfResult.setText("è??å…,æ??æ??ä??å?ˆæ??﵌è??é‡?æ??è??å…,");
isNew=true;
return;
}
double rd=Math.sin(ishow*Math.PI/180);
//è??æ??ä?ºåµ?åº,è?›è?Œè??ç??
int ri=(int)rd;
if(ri==rd)
tfResult.setText(""+ri);
else
tfResult.setText(""+rd);
isNew=true;
}
else if(e.getSource()==button_cos){
String showstr=tfResult.getText();
if(showstr.equals(""))
return;
double ishow=0;
try{
ishow=Double.parseDouble(showstr);
}
catch(NumberFormatException ee){
System.out.println("è??å…,æ??æ??ä??å?ˆæ??ïµ?");
tfResult.setText("è??å…,æ??æ??ä??å?ˆæ??﵌è??é‡?æ??è??å…,");
isNew=true;
return;
}
double rd=Math.cos(ishow*Math.PI/180);
int ri=(int)rd;
if(ri==rd)
tfResult.setText(""+ri);
else
tfResult.setText(""+rd);
isNew=true;
}
else if(e.getSource()==button_tan){
String showstr=tfResult.getText();
if(showstr.equals(""))
return;
double ishow=0;
try{
ishow=Double.parseDouble(showstr);
}
catch(NumberFormatException ee){
System.out.println("è??å…,æ??æ??ä??å?ˆæ??ïµ?");
tfResult.setText("è??å…,æ??æ??ä??å?ˆæ??﵌è??é‡?æ??è??å…,");
isNew=true;
return;
}
double rd=Math.tan(ishow*Math.PI/180);
int ri=(int)rd;
if(ri==rd)
tfResult.setText(""+ri);
else
tfResult.setText(""+rd);
isNew=true;
}
else if(e.getSource()==button_sign){
String showstr=tfResult.getText();
if(showstr.equals(""))
return;
double ishow=0;
try{
ishow=Double.parseDouble(showstr);
}
catch(NumberFormatException ee){
System.out.println("è??å…,æ??æ??ä??å?ˆæ??ïµ?");
return;
}
if(ishow>=0)
tfResult.setText("-"+showstr);
else
tfResult.setText(showstr.substring(1,showstr.length()));
}
//å?šä?‰å??å‚?å??è? ç??
else if(e.getSource()==button_MC){
tfMemory.setText("0");
}
else if(e.getSource()==button_MR){
String savedNum=tfMemory.getText();
isNew=true;
if(!savedNum.equals(""))
tfResult.setText(savedNum);
}
else if(e.getSource()==button_MS){
tfMemory.setText(tfResult.getText());
}
else if(e.getSource()==button_MPlus){
String savednumber=tfMemory.getText();
String showstr=tfResult.getText();
double sn=0,ss=0;
if(savednumber.equals("")||showstr.equals(""))
return;
try{
sn=Double.parseDouble(savednumber);
ss=Double.parseDouble(showstr);
sn+=ss;
}
catch(NumberFormatException ee){
System.out.println("è??å…,æ??æ??ä??å?ˆæ??ïµ?");
tfResult.setText("è??å…,æ??æ??ä??å?ˆæ??﵌è??é‡?æ??è??å…,");
isNew=true;
return;
}
int ir=(int)sn;
if(ir==sn){
tfResult.setText(""+ir);
tfMemory.setText(""+ir);
}
else{
tfResult.setText(""+sn);
tfMemory.setText(""+ir);
}
isNew=true;
}
else if(e.getSource()==button_MMinus){
String savednumber=tfMemory.getText();
String showstr=tfResult.getText();
double sn=0,ss=0;
if(savednumber.equals("")||showstr.equals(""))
return;
try{
sn=Double.parseDouble(savednumber);
ss=Double.parseDouble(showstr);
sn-=ss;
}
catch(NumberFormatException ee){
System.out.println("è??å…,æ??æ??ä??å?ˆæ??ïµ?");
tfResult.setText("è??å…,æ??æ??ä??å?ˆæ??﵌è??é‡?æ??è??å…,");
isNew=true;
return;
}
int ir=(int)sn;
if(ir==sn){
tfResult.setText(""+ir);
tfMemory.setText(""+ir);
}
else{
tfResult.setText(""+sn);
tfMemory.setText(""+ir);
}
isNew=true;
}
//æ?…é›?
else if(e.getSource()==button_CE){
tfResult.setText("0");
isNew=true;
recentOperation=null;
}
}
public static void main(String[] args){
Calculator mf=new Calculator();
mf.setBounds(300,200,310,250);
mf.show();
}
//å››åˆ?è? ç??å?Œä??æ??è? ç??
void equalaction(ActionEvent e){
if(recentOperation==null||recentNum==null||tfResult.getText().equals(""))
return;
double last=0,now=0;
try{
last=Double.parseDouble(recentNum);
now=Double.parseDouble(tfResult.getText());
}
catch(NumberFormatException ee){
recentOperation=null;
recentNum=null;
tfResult.setText("è??å…,æ??æ??ä??å?ˆæ??");
System.out.println("è??å…,æ??æ??ä??å?ˆæ??");
isNew=true;
return;
}
if(recentOperation.equals("add")){
int r=(int)(last+now);
if(r==last+now)
tfResult.setText(""+r);
else
tfResult.setText(""+(last+now));
}
if(recentOperation.equals("sub")){
int r=(int)(last-now);
if(r==last-now)
tfResult.setText(""+r);
else
tfResult.setText(""+(last-now));
}
if(recentOperation.equals("mul")){
int r=(int)(last*now);
if(r==last*now)
tfResult.setText(""+r);
else
tfResult.setText(""+(last*now));
}
if(recentOperation.equals("div")){
int r=(int)(last/now);
if(r==last/now)
tfResult.setText(""+r);
else
tfResult.setText(""+(last/now));
}
//å?šä?‰ä??æ??è? ç??
if(recentOperation.equals("pow")){
int r=(int)Math.pow(last,now);
if(r==Math.pow(last,now))
tfResult.setText(""+r);
else
tfResult.setText(""+Math.pow(last,now));
}
recentNum=tfResult.getText();
recentOperation=null;
isNew=true;
}
}