// 导入必要的类 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;
// 创建计算器类 public class Calculator { // 声明窗口、面板和文本框等组件 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(“=”); // 声明其他功能按钮:sin, cos, tan 和 log Button b16= new Button (“sin”); Button b17= new Button (“cos”); Button b18= new Button (“tan”); Button b19= new Button (“log”); // 创建一个 ActionListener 对象 A aa = new A();
// 创建 ActionListener 类,实现计算器的基本功能 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")) { // 计算 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")) { // 计算 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")) { // 计算 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")) { // 计算 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); } } }
// 初始化方法,用于创建界面和添加事件监听器等操作 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);
p3. add (b16);
p3. add (b17);
p3. add (b18);
p3. add (b19);
b0.addActionListener(aa); // 为数字按钮和运算符按钮添加 ActionListener 监听器
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);
f.add(p1,BorderLayout.NORTH); // 将第一个面板添加到窗口的北部 f.add(p2,BorderLayout.CENTER);// 将第二个面板添加到窗口的中间位置 f.setSize(300,250);// 设置窗口大小和可见性等属性 f.setVisible(true); }
public static void main(String[] args) { new Calculator().init(); // 创建计算器对象并调用初始化方法进行操作 } }