import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.Vector;public class Tuo{String str1="0"; //运算数1 初值一定为0 为了程序的安全String str2="0"; //运算数2String fh="+"; //运算符String jg="";//结果//状态开关重要int k1=1;//开关1 用于选择输入方向将要写入str2或 str2int k2=1;//开关2 符号键次数 k2>1说明进行的是2+3-9+8 这样的多符号运算int k3=1;//开关3 str1 是否可以被清0 ==1时可以 !=1时不能被清0int k4=1;//开关4 str2 同上int k5=1;//开关5 控制小数点可否被录入 ==1时可以 !=1 输入的小数点被丢掉 JButton jicunqi; //寄存器记录是否连续按下符号键Vector vt=new Vector(20,10);JFrame frame=new JFrame("sunshine---计算器");JTextField jg_TextField=new JTextField(jg,20);//20列JButton clear_Button=new JButton("清除");JButton button0=new JButton("0");JButton button1=new JButton("1");JButton button2=new JButton("2");JButton button3=new JButton("3");JButton button4=new JButton("4");JButton button5=new JButton("5");JButton button6=new JButton("6");JButton button7=new JButton("7");JButton button8=new JButton("8");JButton button9=new JButton("9");JButton button_Dian=new JButton(".");JButton button_jia=new JButton("+");JButton button_jian=new JButton("-");JButton button_cheng=new JButton("*");JButton button_chu=new JButton("/");JButton button_dy=new JButton("=");//////////////////////////////////////////////////////////////////////// public static void main(String[] args){Tuo tuo=new Tuo();}///////////////////////////////////////////////////////////////////////// Tuo(){button0.setMnemonic(KeyEvent.VK_0);//等效键//其它等效键略,jg_TextField.setHorizontalAlignment(JTextField.RIGHT );//文本框右对齐JPanel pan=new JPanel();pan.setLayout(new GridLayout(4,4,5,5));//四行四列边距为5像素pan.add(button7);pan.add(button8);pan.add(button9);pan.add(button_chu);pan.add(button4);pan.add(button5);pan.add(button6);pan.add(button_cheng);pan.add(button1);pan.add(button2);pan.add(button3);pan.add(button_jian);pan.add(button0);pan.add(button_Dian);pan.add(button_dy);pan.add(button_jia);pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));//pan对象的边距JPanel pan2=new JPanel();pan2.add(jg_TextField);JPanel pan3=new JPanel(); //为什么要多此一句呢?因为我不会设置按钮的大小 pan3.setLayout(new FlowLayout());pan3.add(clear_Button);//clear_Button.setSize(10,10);//设置清零按钮的大小吗的不好使!!frame.setLocation(300, 200); //主窗口出现在位置frame.setResizable(false); //不能调大小frame.getContentPane().setLayout(new BorderLayout()); frame.getContentPane().add(pan2,BorderLayout.NORTH); frame.getContentPane().add(pan,BorderLayout.CENTER); frame.getContentPane().add(pan3,BorderLayout.SOUTH);frame.pack();frame.setVisible(true);//以上是控件和布局//下面是事件处理程序//--------------- 数字键 ----------------class JianTing implements ActionListener{public void actionPerformed(ActionEvent e){String ss=((JButton)e.getSource()).getText();jicunqi=(JButton)e.getSource();vt.add(jicunqi);if (k1==1){if(k3==1){str1="";k5=1;//还原开关k5状态}str1=str1+ss;//k2=1;k3=k3+1;//System.out.println(str1);jg_TextField.setText(str1);//显示}else if(k1==2){if (k4==1){str2="";k5=1; //还原开关k5状态}str2=str2+ss;//k2=2;///////////////测试////////////////jg_TextField.setText(str2);}}}//--------符号-----------class JianTing_fh implements ActionListener{public void actionPerformed(ActionEvent e){String ss2=((JButton)e.getSource()).getText();jicunqi=(JButton)e.getSource();vt.add(jicunqi);if(k2==1){k1=2;//开关 k1 为1时,向数1写为2时,向数2写k5=1;fh=ss2;k2=k2+1;//按符号键的次数}else{int a=vt.size();JButton c=(JButton)vt.get(a-2);if(!(c.getText().equals("+"))&&!(c.getText().equals("-"))&&!(c.getText().equals ("*"))&&!(c.getText().equals("/")))//if(!(vt.get(a-2).getText().equals("-"))||!(vt.get(a-2).getText().equals("+")) ||!(vt.get(a-2).getText().equals("*"))||!(vt.get(a-2).getText().equals("/"))) { yuns();str1=jg;k1=2;//开关 k1 为1时,向数1写为2时,向数2写k5=1;k4=1;fh=ss2;}}}//--------清除-------class JianTing_clear implements ActionListener {public void actionPerformed(ActionEvent e){jicunqi=(JButton)e.getSource();vt.add(jicunqi);k5=1;k2=1;k1=1;k3=1;k4=1;str1="0";str2="0";fh="";jg="";jg_TextField.setText(jg);vt.clear();}}//----------------等于 --------------------- class JianTing_dy implements ActionListener{public void actionPerformed(ActionEvent e){jicunqi=(JButton)e.getSource();vt.add(jicunqi);yuns();k1=1; //还原开关k1状态//str1=jg;k2=1;k3=1;//还原开关k3状态k4=1; //还原开关k4状态str1=jg; //为7+5=12 +5=17 这种计算做准备}//----------------小数点 ---------------------class JianTing_xiaos implements ActionListener{public void actionPerformed(ActionEvent e){jicunqi=(JButton)e.getSource();vt.add(jicunqi);if(k5==1){String ss2=((JButton)e.getSource()).getText(); if (k1==1){if(k3==1){str1="";k5=1; //还原开关k5状态}str1=str1+ss2;//k2=1;k3=k3+1;//System.out.println(str1);jg_TextField.setText(str1);//显示}else if(k1==2){if (k4==1){str2="";k5=1; //还原开关k5状态}str2=str2+ss2;//k2=2;k4=k4+1;///////////////测试////////////////jg_TextField.setText(str2);}}k5=k5+1; //}//注册监听器JianTing_dy jt_dy=new JianTing_dy();JianTing jt= new JianTing();//临听数字键JianTing_fh jt_fh= new JianTing_fh();//临听符号键JianTing_clear jt_c=new JianTing_clear(); //清除键JianTing_xiaos jt_xs=new JianTing_xiaos();// 小数点键button7.addActionListener(jt);button8.addActionListener(jt);button9.addActionListener(jt);button_chu.addActionListener(jt_fh);button4.addActionListener(jt);button5.addActionListener(jt);button6.addActionListener(jt);button_cheng.addActionListener(jt_fh);button1.addActionListener(jt);button2.addActionListener(jt);button3.addActionListener(jt);button_jian.addActionListener(jt_fh);button0.addActionListener(jt);button_Dian.addActionListener(jt_xs);button_dy.addActionListener(jt_dy);button_jia.addActionListener(jt_fh);clear_Button.addActionListener(jt_c);//关闭事件处理程序frame.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}//---------------计算------------------public void yuns(){double a2;//运算数1double b2;//运算数2String c=fh;// 运算符double jg2=0 ;//结果if (c.equals("")){//System.out.println("请输入运算符");jg_TextField.setText("请输入运算符");}else{System.out.println("str1:"+str1);//调试时使用System.out.println("str2:"+str2);//调试时使用System.out.println("运算符:"+fh);//调试时使用if (str1.equals(".")) //字符串 "." 转换成double型数据时会出错所以手工转 str1="0.0";if (str2.equals("."))str2="0.0";a2=Double.valueOf(str1).doubleValue();b2=Double.valueOf(str2).doubleValue();System.out.println("double型的a2:"+a2); //调试时使用System.out.println("double型的b2:"+b2); //调试时使用if (c.equals("+")){jg2=a2+b2;}if (c.equals("-")){jg2=a2-b2;}if (c.equals("*")){jg2=a2*b2;}if (c.equals("/")){if(b2==0){jg2=0;//0000000000000 by 0 cu!}else{jg2=a2/b2;}}System.out.println("double型a2"+fh+"b2结果:"+jg2);System.out.println();jg=((new Double(jg2)).toString());jg_TextField.setText(jg);}}}。