importjava.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.text.DecimalFormat;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Calculator {
//计算器面板
private JFrame f = newJFrame("Calculator");
//输入面扳
private JPanel inputPanel = newJPanel();
//加减乘除面板
private JPanel operationPanel =new JPanel();
//数字面板
private JPanel buttonsPanel = newJPanel();
//输入数据文本框
private JTextField input = newJTextField(20);
//退格键
private JButton backspace = new JButton("BackSpace");
//清空
private JButton CE = new JButton("CE ");
//删除
private JButton C = newJButton("C ");
//四则运算符号键
private JButton add = newJButton("+");
private JButton sub = newJButton("-");
private JButton mul = newJButton("*");
private JButton div = newJButton("/");
//小数点
private JButton decimal = new JButton(".");
//等号
private JButton equal = newJButton("=");
//数字键
private JButton zero = newJButton("0");
private JButton one = newJButton("1");
private JButton two = newJButton("2");
private JButton three = newJButton("3");
private JButton four = newJButton("4");
private JButton five = newJButton("5");
private JButton six = newJButton("6");
private JButton seven = newJButton("7");
private JButton eight = newJButton("8");
private JButton nine = newJButton("9");
private String num1 ="";//保存第一个运算数字
private String operator ="";//保存运算符号
public static void main(String[]args) {
new Calculator();//new计算器实例
}
public Calculator(){
//添加组件,布局
inputPanel.add(input);
f.add(inputPanel,BorderLayout.NORTH);
operationPanel.add(backspace);
operationPanel.add(CE);
operationPanel.add(C);
f.add(operationPanel,BorderLayout.CENTER);
buttonsPanel.add(add);
buttonsPanel.add(sub);
buttonsPanel.add(mul);
buttonsPanel.add(div);
buttonsPanel.add(one);
buttonsPanel.add(two);
buttonsPanel.add(three);
buttonsPanel.add(zero);
buttonsPanel.add(four);
buttonsPanel.add(five);
buttonsPanel.add(six);
buttonsPanel.add(decimal);
buttonsPanel.add(seven);
buttonsPanel.add(eight);
buttonsPanel.add(nine);
buttonsPanel.add(equal);
buttonsPanel.setLayout(newGridLayout(4, 4));
f.add(buttonsPanel,BorderLayout.SOUTH);
//注册各个组件监听事件
backspace.addMouseListener(newOperationMouseListener());
CE.addMouseListener(newOperationMouseListener());
C.addMouseListener(newOperationMouseListener());
decimal.addMouseListener(newOperationMouseListener());
equal.addMouseListener(newOperationMouseListener());
//注册四则运算监听
add.addMouseListener(newCalcMouseListener());
sub.addMouseListener(newCalcMouseListener());
mul.addMouseListener(newCalcMouseListener());
div.addMouseListener(newCalcMouseListener());
//注册数字监听事件
zero.addMouseListener(newNumberMouseListener());
one.addMouseListener(newNumberMouseListener());
two.addMouseListener(newNumberMouseListener());
three.addMouseListener(newNumberMouseListener());
four.addMouseListener(newNumberMouseListener());
five.addMouseListener(newNumberMouseListener());
six.addMouseListener(newNumberMouseListener());
seven.addMouseListener(newNumberMouseListener());
eight.addMouseListener(newNumberMouseListener());
nine.addMouseListener(newNumberMouseListener());
f.setVisible(true);
f.pack();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private class NumberMouseListenerimplements MouseListener{
public voidmouseClicked(MouseEvent e) {
if(input.getText().trim().equals("0")){//如果文本框已经是0,结果还是0
input.setText(((JButton)e.getSource()).getText().trim());
}else{//否则的话,把0添加到后面,譬如文本框是1,结果就为10
input.setText(input.getText().concat(((JButton)e.getSource()).getText().trim()));
}
}
public voidmouseEntered(MouseEvent e) {}
public voidmouseExited(MouseEvent e) {}
public voidmousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvente) {}
}
private class CalcMouseListenerimplements MouseListener{
//如果输入的是运算符号,保存第一个结果和运算符号
public voidmouseClicked(MouseEvent e) {
num1 =input.getText().trim();input.setText("");
operator =((JButton)e.getSource()).getText().trim();
}
public voidmouseEntered(MouseEvent e) {}
public voidmouseExited(MouseEvent e) {}
public voidmousePressed(MouseEvent e) {}
public voidmouseReleased(MouseEvent e) {}
}
private classOperationMouseListener implements MouseListener{
public voidmouseClicked(MouseEvent e) {
if(e.getSource()== backspace){//退格键,删除一个直到没有字符删除
StringinputText = input.getText();
if(inputText.length()> 0){
input.setText(inputText.substring(0,inputText.length() - 1));
}
}else if(e.getSource() == C){
input.setText("0");//C,清空所有运算数字和符号
num1= "";
}elseif(e.getSource() == CE){
input.setText("0");//CE-->将文本框置为0
}elseif(e.getSource() == decimal){
Stringtext = input.getText().trim();
//如果按了小数点,如果文本框已经有小数点,不做任何操作,否则在结果后面加上小数点
if(text.indexOf(".")== -1){
input.setText(text.concat("."));
}
}elseif(e.getSource() == equal){
//如果是等号
if(!operator.trim().equals("")){
if(!input.getText().trim().equals("")){
doubleresult = 0D;
if(operator.equals("+")){//执行加法运算
result= Double.parseDouble(num1) + Double.parseDouble(input.getText().trim());
}elseif(operator.equals("-")){//减法运算
result= Double.parseDouble(num1) - Double.parseDouble(input.getText().trim());
}elseif(operator.equals("*")){//乘法运算
result= Double.parseDouble(num1) * Double.parseDouble(input.getText().trim());
}elseif(operator.equals("/")){//除法运算
result= Double.parseDouble(num1) / Double.parseDouble(input.getText().trim());
}
//格式化最终结果,保留两位小数点
input.setText(newDecimalFormat("0.00").format(result));
}
}
}
}
public voidmouseEntered(MouseEvent e) {}
public voidmouseExited(MouseEvent e) {}
public void mousePressed(MouseEvente) {}
public voidmouseReleased(MouseEvent e) {}
}
}