需要解决:
1、界面文本框每次输入的内容不被覆盖
2、将文本框的数学算式字符串转换为double类型计算并输出
package com.softeem.counter;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.math.BigDecimal;import java.util.ArrayList;import java.util.List;import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import javax.script.ScriptException;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JTextField;
public class UI extends JFrame implements ActionListener {
String num = "";
private JButton btn0;
private JButton btn1;
private JButton btn2;
private JButton btn3;
private JButton btn4;
private JButton btn5;
private JButton btn6;
private JButton btn7;
private JButton btn8;
private JButton btn9;
private JButton btnAdd;// 加
private JButton btnMinus;// 减
private JButton btnRide;// 乘
private JButton btnDivide;// 除
private JButton btnPoint;// 点 private JButton btnIs;// 等于
private JTextField result;// 计算结果 private JButton btnGL;// 归零
public UI() {
// 设置窗口标题
setTitle("小学生计算器");
// 设置窗体大小
setSize(360, 420);
// 设置当前界面显示的相对位置,设置为null时屏幕会水平居中
setLocationRelativeTo(null);
// 设置禁止窗口大小修改 setResizable(false);
// 显示当前窗体总是在最顶端 setAlwaysOnTop(true);
// 设置当窗体关闭时的默认操作 setDefaultCloseOperation(EXIT_ON_CLOSE); // 初始化组件
init();
// 显示窗体
setVisible(true);
}
public void init() {
// 设置界面中的布局方式(流式布局) setLayout(null);
btn0 = new JButton("0"); btn0.setBounds(20, 305, 125, 70);
btn1 = new JButton("1"); btn1.setBounds(20, 230, 60, 70);
btn2 = new JButton("2"); btn2.setBounds(85, 230, 60, 70);
btn3 = new JButton("3"); btn3.setBounds(150, 230, 60, 70);
btn4 = new JButton("4"); btn4.setBounds(20, 155, 60, 70);
btn5 = new JButton("5"); btn5.setBounds(85, 155, 60, 70);
btn6 = new JButton("6"); btn6.setBounds(150, 155, 60, 70);
btn7 = new JButton("7"); btn7.setBounds(20, 80, 60, 70);
btn8 = new JButton("8"); btn8.setBounds(85, 80, 60, 70);
btn9 = new JButton("9"); btn9.setBounds(150, 80, 60, 70); btnAdd = new JButton("+"); btnAdd.setBounds(215, 80, 60, 70); btnMinus = new JButton("-"); btnMinus.setBounds(280, 80, 60, 70); btnRide = new JButton("×"); btnRide.setBounds(215, 155, 60, 70); btnDivide = new JButton("÷"); btnDivide.setBounds(280, 155, 60, 70); btnPoint = new JButton("."); btnPoint.setBounds(150, 305, 60, 70); btnIs = new JButton("="); btnIs.setBounds(215, 305, 125, 70); btnGL = new JButton("C"); btnGL.setBounds(215, 230, 125, 70); result = new JTextField(); result.setBounds(20, 20, 320, 50);
// 将控件加入窗体中
add(btn0);
add(btn1);
add(btn2);
add(btn3);
add(btn4);
add(btn5);
add(btn6);
add(btn7);
add(btn8);
add(btn9);
add(btnAdd);
add(btnMinus);
add(btnRide);
add(btnDivide);
add(result);
add(btnPoint);
add(btnIs);
add(btnGL);
// 为按钮绑定操作指令
btn0.setActionCommand("0"); btn1.setActionCommand("1"); btn2.setActionCommand("2"); btn3.setActionCommand("3"); btn4.setActionCommand("4"); btn5.setActionCommand("5"); btn6.setActionCommand("6"); btn7.setActionCommand("7"); btn8.setActionCommand("8"); btn9.setActionCommand("9"); btnPoint.setActionCommand("."); btnAdd.setActionCommand("+"); btnMinus.setActionCommand("-"); btnRide.setActionCommand("*"); btnDivide.setActionCommand("/"); btnIs.setActionCommand("="); btnGL.setActionCommand("C");
// 为按钮绑定事件
btn0.addActionListener(this); btn1.addActionListener(this); btn2.addActionListener(this); btn3.addActionListener(this); btn4.addActionListener(this); btn5.addActionListener(this); btn6.addActionListener(this); btn7.addActionListener(this); btn8.addActionListener(this); btn9.addActionListener(this); btnPoint.addActionListener(this); btnAdd.addActionListener(this); btnMinus.addActionListener(this); btnRide.addActionListener(this); btnDivide.addActionListener(this); btnIs.addActionListener(this); btnGL.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) { String s = e.getActionCommand();
//result.setText("0");
switch (s) {
case "0":
num += s; result.setText(num);
break;
case "1":
num += s; result.setText(num);
break;
case "2":
num += s; result.setText(num);
break;
case "3":
num += s; result.setText(num);
break;
case "4":
num += s; result.setText(num);
break;
case "5":
num += s; result.setText(num);
break;
case "6":
num += s; result.setText(num);
break;
case "7":
num += s; result.setText(num);
break;
case "8":
num += s; result.setText(num);
break;
case "9":
num += s; result.setText(num);
break;
case "+":
num += s; result.setText(num);
break;
case "-":
num += s; result.setText(num);
break;
case "*":
num += s; result.setText(num);
break;
case "/":
num += s; result.setText(num);
break;
case ".":
num += s; result.setText(num);
break;
case "C":
num = ""; result.setText(num);
break;
case "=":
ScriptEngine se = new ScriptEngineManager().getEngineByName("JavaScript");
String text = result.getText(); Double d;
try {
d = (Double) se.eval(text); String str = d.toString(); result.setText(str);
} catch(ScriptException e1){
e1.printStackTrace();
}
break;
}
}
}