java超级简易计算器
package com.itany.servlet;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class Counter extends JFrame {
/**
* 作者(itany_XLB)
*/
private static final long serialVersionUID = 1L;
String[] str = new String[] { "BKSP", "CE", "Clr", "+/-", "7", "8", "9",
"/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+" };
JPanel jp1 = new JPanel(new GridLayout(5, 4, 5, 5));
JPanel jp2 = new JPanel(null);
JTextArea txt = new JTextArea();
JButton[] btn = new JButton[20];
StringBuilder sb = new StringBuilder();
public Counter() {
init();
}
@SuppressWarnings("static-access")
public void init() {
MyEvent event = new MyEvent();
for (int i = 0; i < 20; i++) {
btn[i] = new JButton(str[i]);
this.add(btn[i]);
btn[i].addActionListener(event);
jp1.add(btn[i]);
}
txt.setSize(new Dimension(300, 100));
txt.setLineWrap(true);
jp2.add(txt);
this.setLayout(new BorderLayout());
this.add(jp1, BorderLayout.SOUTH);
this.add(jp2, BorderLayout.CENTER);
this.setSize(new Dimension(300, 320));
txt.setFont(new Font(null, WIDTH, 20));
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
this.setVisible(true);
}
/**
* 这里可以用栈来实现(实现比较麻烦),但是可以直接调用js的eval就不用多麻烦了。
*
* @param option
* @return
*/
public double dealNumber(String option) {
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
Object o = null;
try {
o = engine.eval(option);
} catch (ScriptException e) {
JOptionPane.showMessageDialog(null, "亲啊 你输入的格式能算么????");
}
return Double.parseDouble(o.toString());
}
private class MyEvent implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btn[18]) {// 处理=
txt.setText(String.valueOf(dealNumber(sb.toString())));
String str = txt.getText();
sb = new StringBuilder();
sb.append(str);
} else if (e.getSource() == btn[0] || e.getSource() == btn[2]) {// 处理两个清0的
sb = new StringBuilder();
txt.setText(sb.toString());
} else if (e.getSource() == btn[1]) {// 退格
String str = sb.substring(0, sb.length() - 1);
sb = new StringBuilder();
sb.append(str);
txt.setText(sb.toString());
} else if (e.getSource() == btn[3]) {// 处理相反数
if (sb.charAt(0) != '-') {
sb.insert(0, '-');
txt.setText(sb.toString());
} else {
String str = sb.substring(1, sb.length());
sb = new StringBuilder();
sb.append(str);
txt.setText(sb.toString());
}
} else {
for (int i = 0; i < 20; i++) {
if (btn[i] == e.getSource()) {
sb.append(btn[i].getText());
txt.setText(sb.toString());
}
}
}
}
}
public static void main(String[] args) {
new Counter();
}
}
浙公网安备 33010602011771号