package CalcDemo;
import javax.swing.;
import java.awt.;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.StringBufferInputStream;
import java.math.BigDecimal;
import java.math.BigInteger;
class caculate extends JFrame {
private String number;//储存输入数值
private JTextField jx;//输入文本框
private String a;//储存前一个数
private String b;//储存后一个数
private final String Add = “+”;//加
private final String Min = “-”;//减
private final String Multi = “*”;//乘
private final String Div = “/”;//除
private String abs;//存储运算符号
private String result;//存储结果
private BigDecimal b1;
private BigDecimal b2;
private int pone;
private BigInteger number1;
private Clipboard clipboard;
//为初始状态赋值
public caculate() {
number = "";
result = "";
a = "";
b = "";
pone = 0;
clipboard = this.getToolkit().getSystemClipboard();
Initi();
}
//初始化窗口
private void Initi() {
this.setTitle("计算器");
this.setBounds(300, 300, 400, 400);
this.setLayout(null);
creatUI();
this.setVisible(true);
this.setResizable(false);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
private void creatUI() {
addMean();
addText();
addNumber();
addOther();
}
private void addMean() {
JMenuBar bar = new JMenuBar();
this.setJMenuBar(bar);
JMenu help = new JMenu("Edit(E)");
bar.add(help);
JMenuItem item = new JMenuItem("Copy(C)");
help.add(item);
item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.VK_CLEAR));
//键盘敲击事件
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String text = jx.getText();//抓取文本框内的输入字体
StringSelection stringSelection = new StringSelection(text);
clipboard.setContents(stringSelection, null);
}
});
}
/*
* 输入文本
*/
private void addText() {
jx = new JTextField();
jx.setBounds(10, 10, 380, 28);
jx.setFont(new Font("Dialog", 0, 16));
jx.setBorder(BorderFactory.createEtchedBorder(Color.lightGray, Color.gray));
jx.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
if ((e.getKeyChar() >= '0' && e.getKeyChar() <= '9') || e.getKeyChar() == '.') {
if (jx == null && e.getKeyChar() == '.') {
e.consume();
} else {
}
String str = Character.toString(e.getKeyChar());
setNumber(str);
} else {
e.consume();
}
if (e.getKeyChar() == '+') {
setMethod(Add);
}
if (e.getKeyChar() == '-') {
setMethod(Min);
}
if (e.getKeyChar() == '*') {
setMethod(Multi);
}
if (e.getKeyChar() == '/') {
setMethod(Div);
}
if (e.getKeyChar() == KeyEvent.VK_ENTER) {
Cacualte();
display();
}
if (e.getKeyChar() == KeyEvent.VK_BACK_SPACE) {
number = jx.getText();
}
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
});
this.add(jx);
}
public void setNumber(String number)
{
this.number += number;
}
//设置运算规则
public void setMethod(String method) {
if (result == "" && a == "") {
//不以上次结果进行二次运算
a = jx.getText();
}
if (result != "") {
//以上次结果进行再次计算
a = result;
if (a != jx.getText()) {
a = jx.getText();
}
result = "";
}
abs = method;
number = "";
jx.setText(number);
}
//删除
public void delete()
{
if (number.length() != 0) {
number = number.substring(0, number.length() - 1);
}
}
//键盘布局
private void addNumber()
{
JButton button7 = new JButton("7");
button7.setBounds(10, 45, 70, 70);
this.add(button7);
button7.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setNumber("7");
jx.setText(number);
}
});
JButton button8 = new JButton("8");
button8.setBounds(90, 45, 70, 70);
this.add(button8);
button8.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setNumber("8");
jx.setText(number);
}
});
JButton button9 = new JButton("9");
button9.setBounds(170, 45, 70, 70);
this.add(button9);
button9.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setNumber("9");
jx.setText(number);
}
});
JButton button4 = new JButton("4");
button4.setBounds(10, 125, 70, 70);
this.add(button4);
button4.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setNumber("4");
jx.setText(number);
}
});
JButton button5 = new JButton("5");
button5.setBounds(90, 125, 70, 70);
this.add(button5);
button5.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setNumber("5");
jx.setText(number);
}
});
JButton button6 = new JButton("6");
button6.setBounds(170, 125, 70, 70);
this.add(button6);
button6.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setNumber("6");
jx.setText(number);
}
});
JButton button1 = new JButton("1");
button1.setBounds(10, 205, 70, 70);
this.add(button1);
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setNumber("1");
jx.setText(number);
}
});
JButton button2 = new JButton("2");
button2.setBounds(90, 205, 70, 70);
this.add(button2);
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setNumber("2");
jx.setText(number);
}
});
JButton button3 = new JButton("3");
button3.setBounds(170, 205, 70, 70);
this.add(button3);
button3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setNumber("3");
jx.setText(number);
}
});
JButton button0 = new JButton("0");
button0.setBounds(170, 285, 70, 70);
this.add(button0);
button0.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setNumber("0");
jx.setText(number);
}
});
}
/*
* 添加其他和运算按钮
* */
private void addOther() {
JButton Ec = new JButton("MC");//存储显示栏中的数字
Ec.setBounds(250, 45, 70, 70);
this.add(Ec);
Ec.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jx.setText("0");//初始化文本
number = "";
a = "";
b = "";
result = "";
}
});
JButton buttondeAll = new JButton("Delete");//删除键
buttondeAll.setBounds(320, 45, 70, 70);
this.add(buttondeAll);
buttondeAll.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
delete();
jx.setText(number);
}
});
JButton min = new JButton(Min);
min.setBounds(320, 125, 70, 70);
this.add(min);
min.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setMethod(Min);
}
});
JButton add = new JButton(Add);
add.setBounds(250, 125, 70, 70);
this.add(add);
add.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setMethod(Add);
}
});
JButton multi = new JButton(Multi);
multi.setBounds(250, 205, 70, 70);
this.add(multi);
multi.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setMethod(Multi);
}
});
JButton div = new JButton(Div);
div.setBounds(320, 205, 70, 70);
this.add(div);
div.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setMethod(Div);
}
});
JButton equals = new JButton("=");
equals.setBounds(250, 285, 140, 70);
this.add(equals);
equals.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Cacualte();
display();
}
});
JButton point = new JButton(".");
point.setBounds(10, 285, 70, 70);
this.add(point);
point.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (!jx.getText().contains(".")) {
if (jx.getText().length() != 0) {
//在没有数字的时候输入小数点无效
setNumber(".");
jx.setText(number);
}
}
}
});
JButton pow = new JButton("pow");
pow.setBounds(90, 285, 70, 70);
this.add(pow);
pow.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setMethod("pow");
}
});
jx.getCaret().setVisible(true);
}
//计算函数
public void Cacualte() {
if (jx.getText() == null) {
result = null;
} else {
b = jx.getText();
if (abs != "pow") {
if (a.length() != 0 && b.length() != 0) {
b1 = new BigDecimal(a);
b2 = new BigDecimal(b);
if (abs.equals(Add)) {
result = b1.add(b2).toString();
} else if (abs.equals(Multi)) {
result = (b1.multiply(b2).toString());
} else if (abs.equals(Min)) {
result = (b1.multiply(b2).toString());
} else if (abs.equals(Div)) {
result = (b1.multiply(b2).toString());
}
}
} else {
if (a.contains(".") || b.contains(".")) {
number = "";
a = "";
b = "";
JOptionPane.showConfirmDialog(null, "输入错误!", "ERROR", JOptionPane.CLOSED_OPTION);
jx.setText("");
} else {
number1 = new BigInteger(a);
pone = Integer.valueOf(b);
result = number1.pow(pone).toString();
}
}
number = "";
}
}
//显示函数
public void display() {
if (result != "") {
jx.setText(result);
} else if (b == "") {
jx.setText(a);
} else {
jx.setText(b);
}
}
}
public class CalcDemo {
public static void main(String[] args)
{
new caculate();
}
}