学习Java有一段时间了,为了练练手,写了个简单的计算器程序,代码如下: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class CalculatorJFrame extends JFrame implements ActionListener { private JButton btn_sqrt,btn_sign,btn_ce,btn_c, btn_7,btn_8,btn_9,btn_div, btn_4,btn_5,btn_6,btn_mul, btn_1,btn_2,btn_3,btn_sub, btn_0,btn_dot,btn_equal,btn_plus; private JTextField text; //显示结果的文本框。 private Panel pn; //放置按钮的面板。 private double r; //r保存计算结果。 private int flag=1; //flag==1表示正在输入第一个数,flag==2表示正在输入第二个数。 private String s,s1,s2; //s保存操作符,s1和s2保存两个操作数。 //初始化窗口: public CalculatorJFrame() { super("计算器"); this.setSize(251,220); this.setLocation(300,150); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setResizable(false); this.setLayout(new BorderLayout(5,5)); text=new JTextField("0."); text.setHorizontalAlignment(JTextField.RIGHT); text.setEditable(false); text.setBackground(Color.white); this.add(text,"North"); pn=new Panel(new GridLayout(5,4,2,2)); this.add(pn); //添加按钮: btn_sqrt=addButton("sqrt"); btn_sign=addButton("-/+"); btn_ce=addButton("CE"); btn_c=addButton("C"); btn_7=addButton("7"); btn_8=addButton("8"); btn_9=addButton("9"); btn_div=addButton("/"); btn_4=addButton("4"); btn_5=addButton("5"); btn_6=addButton("6"); btn_mul=addButton("x"); btn_1=addButton("1"); btn_2=addButton("2"); btn_3=addButton("3"); btn_sub=addButton("-"); btn_0=addButton("0"); btn_dot=addButton("."); btn_equal=addButton("="); btn_plus=addButton("+"); this.setVisible(true); s1=new String(""); s2=new String(""); s=new String(""); } //添加按钮的函数: private JButton addButton(String label) { JButton button=new JButton(label); pn.add(button); button.addActionListener(this); return button; } //单击按钮响应: public void actionPerformed(ActionEvent e) { JButton b=(JButton)e.getSource(); boolean digit=(b==btn_dot||b==btn_0||b==btn_1||b==btn_2||b==btn_3||b==btn_4 //事件源为数字或小数点按钮,则digit==true。 ||b==btn_5||b==btn_6||b==btn_7||b==btn_8||b==btn_9); boolean sign=(b==btn_mul||b==btn_div||b==btn_sub||b==btn_plus||b==btn_equal); //事件源为为加、减、乘、除、等号按钮,则sign=true。 //事件源为数字或小数点按钮: if(digit) { if(s.equals("="))//如果之前输入的是等号,则清空所有操作数重新开始计算。 { flag=1; s1=s2=""; s=""; } if(flag==1)//输入第一个操作数,存入字符串s1。 { s1=s1+b.getText(); text.setText(s1); } if(flag==2)//输入第二个操作数,存入字符串s2。 { s2=s2+b.getText(); text.setText(s2); } } //事件源为加、减、乘、除、等号按钮: if(sign) { if(s2.equals("")&&!s1.equals(""))//完成第一个操作数的输入时,flag变为2。 { flag=2; } if(!s2.equals(""))//完成第二个操作数的输入时,计算结果。 { try { this.result();//计算结果并存入变量r。 text.setText(""+r);//显示结果。 s1=""+r;//将结果作为第一个操作数继续进行下一步运算。 s2="";//清空第二个操作数。 } catch(NumberFormatException nfe) { text.setText(nfe.getMessage()+",请重新输入!"); flag=1; s1="";s2="";s=""; } } s=b.getText();//得到操作符,存入变量s } if(b==btn_ce)//按下CE按钮清空当前输入的操作数。 { if(!s2.equals(""))//如果已经输入两个操作数,则清空第二个,并在文本框text中显示第一个操作数作为当前操作数。 { text.setText(s1); s2=""; } else //如果只输入了一个操作数,则清空第一个。 { text.setText("0."); s1=""; } } if(b==btn_c)//按下C按钮清空所有操作数。 { flag=1; text.setText("0."); s1=""; s2=""; s=""; } if(b==btn_sqrt&&!text.getText().equals("0.")) { try { double d=Math.sqrt(Double.parseDouble(text.getText())); if(!s2.equals(""))s2=""+d; else s1=""+d; text.setText(""+d); } catch(NumberFormatException nfe) { text.setText(nfe.getMessage()+"请重新输入!"); s1=s2=s=""; flag=1; } } if(b==btn_sign)//按下“-/+按钮”。 { if(!s2.equals(""))//已经输入了两个操作数,则对第二个进行符号改变。 { if(s2.charAt(0)=='-')//如果为负数,单击“-/+”按钮后则变为正数。 s2=s2.substring(1); else //如果为正数,单击“-/+”按钮后则变为负数。 s2="-"+s2; text.setText(s2); } if(s2.equals("")&&!s1.equals(""))//对第一个数进行符号改变。 { if(s1.charAt(0)=='-') s1=s1.substring(1); else s1="-"+s1; text.setText(s1); } } }//actionPerformed end. //计算结果的函数: public void result()throws NumberFormatException { double d1=Double.parseDouble(s1); double d2=Double.parseDouble(s2); char c=s.charAt(0); //得到操作符。 switch(c) { case 'x' : r=d1*d2;break; case '/' : r=d1/d2;break; case '+' : r=d1+d2;break; case '-' : r=d1-d2;break; } } //主函数: public static void main(String args[]) { new CalculatorJFrame(); } } 运行结果如下: