Java小程序–一个基于AWT界面的计算器
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Calculator {
private Frame frame=new Frame("计算机");
private TextField textField=new TextField();
private Button[] buttons=new Button[16];
private Panel panel=new Panel();
StringBuilder sb=new StringBuilder();
public void init(){
for(int i=0;i<10;i++){
buttons[i]=new Button(i+"");
}
buttons[10]=new Button("+");
buttons[11]=new Button("-");
buttons[12]=new Button("*");
buttons[13]=new Button("/");
buttons[14]=new Button("=");
frame.add(textField,BorderLayout.NORTH);
panel.setLayout(new GridLayout(3,5,4,4));
for(int i=0;i<15;i++){
panel.add(buttons[i]);
buttons[i].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if("="!=command){
sb.append(command);
textField.setText(command);
}else{
String result = calResult(sb.toString());
textField.setText(result);
sb=new StringBuilder();
System.out.println(sb);
}
}
});
}
frame.add(panel,BorderLayout.SOUTH);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.pack();
frame.setLocationRelativeTo(null);
frame.setSize(300,140);
}
private String calResult(String command){
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("nashorn");
String result=null;
try {
result = String.valueOf(scriptEngine.eval(command));
} catch (ScriptException e) {
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
new Calculator().init();
}
}
有点偷懒,没有写字符串运算的具体算法,而且没有进行复杂运算,如果想要加一些复杂运算,只需增加几个按钮而已