import java.awt.*;
import java.awt.event.*;
public class calculator//一个类。
{
public static void main(String args[])//主函数。
{
MyWindow my=new MyWindow("计算器"); //设置框架标题
}
}
class MyWindow extends Frame implements ActionListener
{ StringBuffer m=new StringBuffer();//创建一个实例。
int p;
TextField tex;//定义一个文本行。
Button b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,jia,jian,cheng,chu,deng,dian,qingling,sin,cos,tan;//定义按钮。
MyWindow(String s)//类的构造方法。
{super(s);
StringBuffer s2=new StringBuffer();
String s;
tex=new TextField(18);
b0=new Button(" 0 ");
b1=new Button(" 1 ");
b2=new Button(" 2 ");
b3=new Button(" 3 ");
b4=new Button(" 4 ");
b5=new Button(" 5 ");
b6=new Button(" 6 ");
b7=new Button(" 7 ");
b8=new Button(" 8 ");
b9=new Button(" 9 ");
dian=new Button(" . ");
jia=new Button(" + ");
jian=new Button(" - ");
cheng=new Button(" × ");
chu=new Button(" / ");
deng=new Button(" = ");
qingling=new Button(" 清零 ");
sin=new Button("sin");
cos=new Button("cos");
tan=new Button("tan");//创建实例,并对实例成员变量进行初始化。setLayout(new FlowLayout());//设置为流布局管理。
add(tex);
add(b0);
add(b1);
add(b2);
add(b3);
add(b4);
add(b5);
add(b6);
add(b7);
add(b8);
add(b9);
add(dian);
add(jia);
add(jian);
add(cheng);
add(chu);
add(qingling);
add(deng);
add(cos);
add(sin);
add(tan);//添加每个按钮和文本行放在窗口上。
b0.addActionListener(this);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
jia.addActionListener(this);
jian.addActionListener(this);
cheng.addActionListener(this);
chu.addActionListener(this);
dian.addActionListener(this);
deng.addActionListener(this);
qingling.addActionListener(this);
sin.addActionListener(this);
cos.addActionListener(this);
tan.addActionListener(this);//为按钮注册窗口事件监听器,委托Winclose对象处理事件。
setBounds(200,200,160,280);//设置窗口大小。
setResizable(false);//不可改变大小
setVisible(true);//窗口可视化。
validate();//布局美观。
addWindowListener(new WindowAdapter()//实现窗口事件监听器接口。
{ public void windowClosing(WindowEvent ee)//窗口关闭事件处理方法。
{ System.exit(0);}}}
public void actionPerformed(ActionEvent e)//单机事件处理方法,实现//ActionListener接口。
{
if(e.getSource()==b0)//获得当前事件源组件,比较引用
{
m=m.append("0");//字符串转换为整数。
tex.setText(String.valueOf(m)); //将m转换成字符串。
}if(e.getSource()==b1)
{ m=m.append("1"); tex.setText(String.valueOf(m));
}
if(e.getSource()==b2){
m=m.append("2"); tex.setText(String.valueOf(m));
}
if(e.getSource()==b3)
{
m=m.append("3"); tex.setText(String.valueOf(m));
}
if(e.getSource()==b4)
{
m=m.append("4"); tex.setText(String.valueOf(m));
}
if(e.getSource()==b5)
{
m=m.append("5"); tex.setText(String.valueOf(m));
}
if(e.getSource()==b6)
{
m=m.append("6"); tex.setText(String.valueOf(m));
}
if(e.getSource()==b7)
{
m=m.append("7"); tex.setText(String.valueOf(m));
}
if(e.getSource()==b8)
{
m=m.append("8"); tex.setText(String.valueOf(m));
}if(e.getSource()==b9)
{m=m.append("9"); tex.setText(String.valueOf(m));
}
if(e.getSource()==jia)
{ m=m.append("+"); tex.setText(String.valueOf(m));
}if(e.getSource()==jian)
{m=m.append("-"); tex.setText(String.valueOf(m));
}
if(e.getSource()==cheng)
{ m=m.append("*"); tex.setText(String.valueOf(m));
}
if(e.getSource()==chu)
{ m=m.append("/"); tex.setText(String.valueOf(m));
}
if(e.getSource()==dian)
{ m=m.append("."); tex.setText(String.valueOf(m));
}
String mm=String.valueOf(m);
int p1=mm.indexOf("+");//字符串的IndexOf()方法搜索在该字符串上是否出现了作为//参数传递的字符串,
int p2=mm.indexOf("-");//如果找到字符串,则返回字符的起始位置 (0表示第
int p3=mm.indexOf("*");//一个字符,1表示第二个字符依此类推)如果说没有找到则返//回 -1.
int p4=mm.indexOf("/");
if(p1!=-1){
p=p1;
}
else if(p3!=-1)
{p=p3;
} else if(p2!=-1)
{
p=p2;
}
else if(p4!=-1)
{p=p4;
}
if(e.getSource()==deng)
{ String m1=mm.substring(0,p);
String m2=mm.substring(p+1);
String ch=mm.substring(p,p+1);
if(ch.equals("+"))
{
float n1=Float.parseFloat(m1); //字符串转换为整数。
float n2=Float.parseFloat(m2);
float sum=n1+n2;
String su=String.valueOf(sum);//数字转换为字符串。
tex.setText(su);
}
if(ch.equals("-"))//按钮为“-”。
{ float n1=Float.parseFloat(m1);
float n2=Float.parseFloat(m2);
float sum=n1-n2;
String su=String.valueOf(sum);
tex.setText(su);
}
if(ch.equals("*"))
{
float n1=Float.parseFloat(m1);
float n2=Float.parseFloat(m2);
float sum=n1*n2;
String su=String.valueOf(sum);
tex.setText(su);
}if(ch.equals("/"))
{
float n1=Float.parseFloat(m1);
float n2=Float.parseFloat(m2);
float sum=n1/n2;
String su=String.valueOf(sum);
tex.setText(su);
}}
if(e.getSource()==qingling)
{StringBuffer kk=new StringBuffer();
m=kk;
tex.setText("0");
}
if(e.getSource()==sin)
{
String t=tex.getText();
double num=Float.parseFloat(t);
num=num*(Math.PI/180);
double nub=Math.sin(num);
tex.setText(String.valueOf(nub));
}
if(e.getSource()==cos)
{
String t=tex.getText();
double num=Float.parseFloat(t);
num=num*(Math.PI/180);//弧度转换为角度。
double nub=Math.cos(num);
tex.setText(String.valueOf(nub));
}
if(e.getSource()==tan)
{
String t=tex.getText();
double num=Float.parseFloat(t);
num=num*(Math.PI/180);
double nub=Math.tan(num);
tex.setText(String.valueOf(nub))
}
}
}