//导入需要用到的包 import java.awt.BorderLayout; import java.awt.Button; import java.awt.Frame; import java.awt.GridLayout; import java.awt.Panel; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
//定义一个Calculator类 public class Calculator {
//创建Frame、Panel和TextField对象以及16个按钮对象
Frame f = new Frame("计算器");
Panel p1 = new Panel();
Panel p2 = new Panel();
TextField tf = new TextField(30);
Button b0 = new Button("1");
Button b1 = new Button("2");
Button b2 = new Button("3");
Button b3 = new Button("/");
Button b4 = new Button("4");
Button b5 = new Button("5");
Button b6 = new Button("6");
Button b7 = new Button("*");
Button b8 = new Button("7");
Button b9 = new Button("8");
Button b10 = new Button("9");
Button b11= new Button("-");
Button b12 = new Button(“0”);
Button b13 =new Button ("c");
Button b14= new Button("+");
Button b15= new Button("=");
Button b16= new Button ("sin");
Button b17= new Button ("cos");
Button b18= new Button ("tan");
Button b19= new Button (“log”);
//定义一个实现ActionListener接口的内部类A,用于监听所有按钮事件
A aa=new A();
//定义一个实现ActionListener接口的内部类A,用于监听所有按钮事件
class A implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
//获取点击的按钮的文本
String s = e.getActionCommand();
if(s.equals("c")) {//清零
tf.setText("");
}else if(s.equals("=")) {
try {
String str = tf.getText().trim();
double result = 0.0;
if(str.contains("+")) {
String num1 = str.substring(0,str.indexOf("+")).trim();
String num2 = str.substring(str.indexOf("+")+1).trim();
result = Double.parseDouble(num1)+Double.parseDouble(num2);
}else if(str.contains("-")) {
String num1 = str.substring(0,str.indexOf("-")).trim();
String num2 = str.substring(str.indexOf("-")+1).trim();
result = Double.parseDouble(num1)-Double.parseDouble(num2);
}else if(str.contains("*")) {
String num1 = str.substring(0,str.indexOf("*")).trim();
String num2 = str.substring(str.indexOf("*")+1).trim();
result = Double.parseDouble(num1)*Double.parseDouble(num2);
}else if(str.contains("/")) {
String num1 = str.substring(0,str.indexOf("/")).trim();
String num2 = str.substring(str.indexOf("/")+1).trim();
if(num2.equals("0")) {
tf.setText("分母不能为0");
return;
}
result=Double.parseDouble(num1)/Double.parseDouble(num2);
}
tf.setText(String.valueOf(result));
}catch(Exception exception) {
tf.setText("输入有误");
}
}else if(s.equals("sin")) {
try {
String str=tf.getText().trim();
double num=Double.parseDouble (str);
double result=Math.sin (num * Math.PI / 180);
tf.setText (String.valueOf(result));
}catch(Exception exception) {
tf.setText("输入有误");
}
}else if(s.equals("cos")) {
try {
String str=tf.getText().trim();
double num=Double.parseDouble (str);
double result=Math.cos (num * Math.PI / 180);
tf.setText (String.valueOf(result));
}catch(Exception exception) {
tf.setText("输入有误");
}
}else if(s.equals("tan")) {
try {
String str = tf.getText().trim();
double num = Double.parseDouble(str);
double result = Math.tan(num * Math.PI / 180);
tf.setText(String.valueOf(result));
}catch(Exception exception) {
tf.setText("输入有误");
}
}else if(s.equals("log")) {
try {
String str = tf.getText().trim();
double num = Double.parseDouble(str);
double result = Math.log(num);
tf.setText(String.valueOf(result));
}catch(Exception exception) {
tf.setText("输入有误");
}
} else if (Character.isDigit(s.charAt(0))) { // 限制只能输入数字
tf.setText(tf.getText() + s);
}
}
}
//定义一个init()方法用于初始化界面 void init() {
p1.add(tf);
p2.setLayout(new GridLayout(5,4,5,5));
p2.add(b1);
p2.add(b2);
p2.add(b3);
p2.add(b0);
p2.add(b4);
p2.add(b5);
p2.add(b6);
p2.add(b7);
p2.add(b8);
p2.add(b9);
p2.add(b10);
p2. add(b11);
p2.add(b12);
p2. add(b13);
p2.add(b14);
p2.add(b15);
p2.add(b16);
p2.add(b17);
p2.add(b18);
p2.add(b19);
//为所有按钮添加监听器
b0.addActionListener(aa);
b1.addActionListener(aa);
b2.addActionListener(aa);
b3.addActionListener(aa);
b4.addActionListener(aa);
b5.addActionListener(aa);
b6.addActionListener(aa);
b7.addActionListener(aa);
b8.addActionListener(aa);
b9.addActionListener(aa);
b10. addActionListener (aa) ;
b11. addActionListener (aa) ;
b12. addActionListener (aa) ;
b13. addActionListener (aa) ;
b14. addActionListener (aa) ;
b15. addActionListener (aa) ;
b16. addActionListener (aa) ;
b17 .addActionListener (aa) ;
b18 .addActionListener (aa) ;
b19 .addActionListener (aa);
//将各个控件添加到Frame中,并设置Frame的属性
f.add(p1,BorderLayout.NORTH);
f.add(p2,BorderLayout.CENTER);
f.setSize(300,250);// 设置计算器窗口大小
f.setVisible(true);// 计算器窗口可见性设置为true
}
//定义一个main()方法,创建Calculator对象并调用init()方法初始化界面 public static void main(String[] args) {
new Calculator().init();
}