计算器
1 import java.awt.*; 2 import java.awt.event.*; 3 public class calculator//一个类。 4 { 5 public static void main(String args[])//主函数。 6 { 7 MyWindow my=new MyWindow("计算器"); //设置框架标题 8 } 9 } 10 class MyWindow extends Frame implements ActionListener 11 { StringBuffer m=new StringBuffer();//创建一个实例。 12 int p; 13 TextField tex;//定义一个文本行。 14 Button b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,jia,jian,cheng,chu,deng,dian,qingling,sin,cos,tan;//定义按钮。 15 MyWindow(String s)//类的构造方法。 16 {super(s); 17 StringBuffer s2=new StringBuffer(); 18 String s; 19 tex=new TextField(18); 20 b0=new Button(" 0 "); 21 b1=new Button(" 1 "); 22 b2=new Button(" 2 "); 23 b3=new Button(" 3 "); 24 b4=new Button(" 4 "); 25 b5=new Button(" 5 "); 26 b6=new Button(" 6 "); 27 b7=new Button(" 7 "); 28 b8=new Button(" 8 "); 29 b9=new Button(" 9 "); 30 dian=new Button(" . "); 31 jia=new Button(" + "); 32 jian=new Button(" - "); 33 cheng=new Button(" × "); 34 chu=new Button(" / "); 35 deng=new Button(" = "); 36 qingling=new Button(" 清零 "); 37 sin=new Button("sin"); 38 cos=new Button("cos"); 39 tan=new Button("tan");//创建实例,并对实例成员变量进行初始化。setLayout(new FlowLayout());//设置为流布局管理。 40 add(tex); 41 add(b0); 42 add(b1); 43 add(b2); 44 add(b3); 45 add(b4); 46 add(b5); 47 add(b6); 48 add(b7); 49 add(b8); 50 add(b9); 51 add(dian); 52 add(jia); 53 add(jian); 54 add(cheng); 55 add(chu); 56 add(qingling); 57 add(deng); 58 add(cos); 59 add(sin); 60 add(tan);//添加每个按钮和文本行放在窗口上。 61 b0.addActionListener(this); 62 b1.addActionListener(this); 63 b2.addActionListener(this); 64 b3.addActionListener(this); 65 b4.addActionListener(this); 66 b5.addActionListener(this); 67 b6.addActionListener(this); 68 b7.addActionListener(this); 69 b8.addActionListener(this); 70 b9.addActionListener(this); 71 jia.addActionListener(this); 72 jian.addActionListener(this); 73 cheng.addActionListener(this); 74 chu.addActionListener(this); 75 dian.addActionListener(this); 76 deng.addActionListener(this); 77 qingling.addActionListener(this); 78 sin.addActionListener(this); 79 cos.addActionListener(this); 80 tan.addActionListener(this);//为按钮注册窗口事件监听器,委托Winclose对象处理事件。 81 setBounds(200,200,160,280);//设置窗口大小。 82 setResizable(false);//不可改变大小 83 setVisible(true);//窗口可视化。 84 validate();//布局美观。 85 addWindowListener(new WindowAdapter()//实现窗口事件监听器接口。 86 { public void windowClosing(WindowEvent ee)//窗口关闭事件处理方法。 87 { System.exit(0);}}} 88 public void actionPerformed(ActionEvent e)//单机事件处理方法,实现//ActionListener接口。 89 { 90 if(e.getSource()==b0)//获得当前事件源组件,比较引用 91 { 92 m=m.append("0");//字符串转换为整数。 93 tex.setText(String.valueOf(m)); //将m转换成字符串。 94 }if(e.getSource()==b1) 95 { m=m.append("1"); tex.setText(String.valueOf(m)); 96 } 97 if(e.getSource()==b2){ 98 m=m.append("2"); tex.setText(String.valueOf(m)); 99 } 100 if(e.getSource()==b3) 101 { 102 m=m.append("3"); tex.setText(String.valueOf(m)); 103 } 104 if(e.getSource()==b4) 105 { 106 m=m.append("4"); tex.setText(String.valueOf(m)); 107 } 108 if(e.getSource()==b5) 109 { 110 m=m.append("5"); tex.setText(String.valueOf(m)); 111 } 112 if(e.getSource()==b6) 113 { 114 m=m.append("6"); tex.setText(String.valueOf(m)); 115 } 116 if(e.getSource()==b7) 117 { 118 m=m.append("7"); tex.setText(String.valueOf(m)); 119 } 120 if(e.getSource()==b8) 121 { 122 m=m.append("8"); tex.setText(String.valueOf(m)); 123 }if(e.getSource()==b9) 124 {m=m.append("9"); tex.setText(String.valueOf(m)); 125 } 126 if(e.getSource()==jia) 127 { m=m.append("+"); tex.setText(String.valueOf(m)); 128 }if(e.getSource()==jian) 129 {m=m.append("-"); tex.setText(String.valueOf(m)); 130 } 131 if(e.getSource()==cheng) 132 { m=m.append("*"); tex.setText(String.valueOf(m)); 133 } 134 if(e.getSource()==chu) 135 { m=m.append("/"); tex.setText(String.valueOf(m)); 136 } 137 if(e.getSource()==dian) 138 { m=m.append("."); tex.setText(String.valueOf(m)); 139 } 140 String mm=String.valueOf(m); 141 int p1=mm.indexOf("+");//字符串的IndexOf()方法搜索在该字符串上是否出现了作为//参数传递的字符串, 142 int p2=mm.indexOf("-");//如果找到字符串,则返回字符的起始位置 (0表示第 143 int p3=mm.indexOf("*");//一个字符,1表示第二个字符依此类推)如果说没有找到则返//回 -1. 144 int p4=mm.indexOf("/"); 145 if(p1!=-1){ 146 p=p1; 147 } 148 else if(p3!=-1) 149 {p=p3; 150 } else if(p2!=-1) 151 { 152 p=p2; 153 } 154 else if(p4!=-1) 155 {p=p4; 156 } 157 if(e.getSource()==deng) 158 { String m1=mm.substring(0,p); 159 String m2=mm.substring(p+1); 160 String ch=mm.substring(p,p+1); 161 if(ch.equals("+")) 162 { 163 float n1=Float.parseFloat(m1); //字符串转换为整数。 164 float n2=Float.parseFloat(m2); 165 float sum=n1+n2; 166 String su=String.valueOf(sum);//数字转换为字符串。 167 tex.setText(su); 168 } 169 if(ch.equals("-"))//按钮为“-”。 170 { float n1=Float.parseFloat(m1); 171 float n2=Float.parseFloat(m2); 172 float sum=n1-n2; 173 String su=String.valueOf(sum); 174 tex.setText(su); 175 } 176 if(ch.equals("*")) 177 { 178 float n1=Float.parseFloat(m1); 179 float n2=Float.parseFloat(m2); 180 float sum=n1*n2; 181 String su=String.valueOf(sum); 182 tex.setText(su); 183 }if(ch.equals("/")) 184 { 185 float n1=Float.parseFloat(m1); 186 float n2=Float.parseFloat(m2); 187 float sum=n1/n2; 188 String su=String.valueOf(sum); 189 tex.setText(su); 190 }} 191 if(e.getSource()==qingling) 192 {StringBuffer kk=new StringBuffer(); 193 m=kk; 194 tex.setText("0"); 195 } 196 if(e.getSource()==sin) 197 { 198 String t=tex.getText(); 199 double num=Float.parseFloat(t); 200 num=num*(Math.PI/180); 201 double nub=Math.sin(num); 202 tex.setText(String.valueOf(nub)); 203 } 204 if(e.getSource()==cos) 205 { 206 String t=tex.getText(); 207 double num=Float.parseFloat(t); 208 num=num*(Math.PI/180);//弧度转换为角度。 209 double nub=Math.cos(num); 210 tex.setText(String.valueOf(nub)); 211 } 212 if(e.getSource()==tan) 213 { 214 String t=tex.getText(); 215 double num=Float.parseFloat(t); 216 num=num*(Math.PI/180); 217 double nub=Math.tan(num); 218 tex.setText(String.valueOf(nub)) 219 } 220 } 221 } 222