计算器代码1.2版本
package org.example;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class calculator extends JFrame implements ActionListener {
StringBuilder builder = new StringBuilder();
JTextField textField = new JTextField(15);
JButton but_0 = new JButton("0");
JButton but_1 = new JButton("1");
JButton but_2 = new JButton("2");
JButton but_3 = new JButton("3");
JButton but_4 = new JButton("4");
JButton but_5 = new JButton("5");
JButton but_6 = new JButton("6");
JButton but_7 = new JButton("7");
JButton but_8 = new JButton("8");
JButton but_9 = new JButton("9");
JButton but_add = new JButton("+");
JButton but_sub = new JButton("-");
JButton but_mul = new JButton("*");
JButton but_div = new JButton("/");
JButton but_c = new JButton("c");
JButton but_b = new JButton("b");
JButton but_sin = new JButton("sin");
JButton but_cos = new JButton("cos");
JButton but_sqrt = new JButton("sqrt");
JButton but_x2 = new JButton("X2");
JButton but_equal = new JButton("=");
JPanel panel1 = new JPanel(new GridLayout(9,3));
public calculator(){
this.setTitle("标准计算器");
this.setLayout(new FlowLayout());
//设置容器显示的位置和大小
this.setBounds(700,300,400,400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置按钮文字的大小
Font font = new Font("Arial", Font.BOLD, 18);
but_0.setFont(font);
but_1.setFont(font);
but_2.setFont(font);
but_3.setFont(font);
but_4.setFont(font);
but_5.setFont(font);
but_6.setFont(font);
but_7.setFont(font);
but_8.setFont(font);
but_9.setFont(font);
but_add.setFont(font);
but_sub.setFont(font);
but_mul.setFont(font);
but_div.setFont(font);
but_c.setFont(font);
but_b.setFont(font);
but_sin.setFont(font);
but_cos.setFont(font);
but_x2.setFont(font);
but_sqrt.setFont(font);
but_equal.setFont(font);
panel1.add(but_0);
panel1.add(but_1);
panel1.add(but_2);
panel1.add(but_3);
panel1.add(but_4);
panel1.add(but_5);
panel1.add(but_6);
panel1.add(but_7);
panel1.add(but_8);
panel1.add(but_9);
panel1.add(but_add);
panel1.add(but_sub);
panel1.add(but_mul);
panel1.add(but_div);
panel1.add(but_c);
panel1.add(but_b);
panel1.add(but_sin);
panel1.add(but_cos);
panel1.add(but_x2);
panel1.add(but_sqrt);
panel1.add(but_equal);
textField.setEditable(false);
//设置文本框大小
textField.setPreferredSize(new Dimension(200, 30));
textField.setFont(font);
this.add(textField);
this.add(panel1);
but_0.addActionListener(this);
but_1.addActionListener(this);
but_2.addActionListener(this);
but_3.addActionListener(this);
but_4.addActionListener(this);
but_5.addActionListener(this);
but_6.addActionListener(this);
but_7.addActionListener(this);
but_8.addActionListener(this);
but_9.addActionListener(this);
but_add.addActionListener(this);
but_sub.addActionListener(this);
but_mul.addActionListener(this);
but_div.addActionListener(this);
but_c.addActionListener(this);
but_b.addActionListener(this);
but_sin.addActionListener(this);
but_cos.addActionListener(this);
but_x2.addActionListener(this);
but_sqrt.addActionListener(this);
but_equal.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
String str = e.getActionCommand();
double a,b;
String string;
string=builder.substring(0, builder.length());
if("=".equals(str)){
if ((-1)!=builder.indexOf("+")){//判断是否是+号,是的话执行加法运算,不能做连续运算
a = Double.parseDouble(builder.substring(0, builder.indexOf("+")));
b = Double.parseDouble(builder.substring(builder.indexOf("+") + 1));
builder.delete(0, builder.length());
textField.setText((a + b) + "");
}else if((-1)!=builder.indexOf("-")) {
a = Double.parseDouble(builder.substring(0, builder.indexOf("-")));
b = Double.parseDouble(builder.substring(builder.indexOf("-") + 1));
builder.delete(0, builder.length());
textField.setText((a - b) + "");
}else if((-1)!=builder.indexOf("*")) {
a = Double.parseDouble(builder.substring(0, builder.indexOf("*")));
b = Double.parseDouble(builder.substring(builder.indexOf("*") + 1));
builder.delete(0, builder.length());
textField.setText((a * b) + "");
}else if((-1)!=builder.indexOf("/")) {
a = Double.parseDouble(builder.substring(0, builder.indexOf("/")));
b = Double.parseDouble(builder.substring(builder.indexOf("/") + 1));
builder.delete(0, builder.length());
textField.setText((a / b) + "");
}
}else if("+".equals(str)||"-".equals(str)||"*".equals(str)||"/".equals(str)){
if (!Character.isDigit(string.charAt(string.length() - 1))) {//判断是不是最后一个字符是不是运算符号,是的话替换
builder.delete(builder.length() - 1, builder.length());
}
builder.append(str);
textField.setText(builder+"");
}else if("c".equals(str)){
builder.delete(0,builder.length());
textField.setText(builder+"");
}else if("b".equals(str)){
builder.delete(builder.length()-1,builder.length());
textField.setText(builder+"");
}else if("sin".equals(str)){
if(isNumeric(string)) {//调用函数isNumeric,判断是不是纯数字,是的话,进行sin运算。
a = Double.parseDouble(builder+"");
textField.setText(Math.sin(a / 180 * Math.PI) + "");
}
else
{
textField.setText("输入错误");
}
}else if("cos".equals(str)){
if(isNumeric(string)) {
a = Double.parseDouble(builder+"");
textField.setText(Math.cos(a/180*Math.PI)+"");
}
else
{
textField.setText("输入错误");
}
}else if("X2".equals(str)){
if (isNumeric(string)) {
a = Double.parseDouble(builder + "");
builder.delete(0, builder.length());
textField.setText((a * a) + "");
}
else{
textField.setText("输入错误");
}
}else if("sqrt".equals(str)){
if (isNumeric(string)) {
a = Double.parseDouble(builder + "");
builder.delete(0, builder.length());
textField.setText(Math.sqrt(a) + "");
}
else{
textField.setText("输入错误");
}
}else{
builder.append(str);
textField.setText(builder+"");
}
}
private boolean isNumeric(String str) {//isNumeric函数
for (int i = str.length();--i>=0;){
if (!Character.isDigit(str.charAt(i))){
return false;
}
}
return true;
}
}
main文件
public class test {
public static void main(String[] args) {
calculator calculator = new calculator();//实例化计算器
calculator.setVisible(true);//视图显示
}
}