import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
/*
* 该计算器比较简陋,很多功能没有实现
*
*/
public class Compute extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
private HashMap<String,Object> number ;
private HashMap<String,Character> operator ;
private JTextField result;
private JButton num0,num1,num2,num3,num4,num5,num6,
num7,num8,num9;//定义数字
private JButton point;//定义小数点
private JButton add,sub,mul,div,equ,clearScreen;//定义加减乘除和等于号
private JPanel pan;
public Compute(){
init();
}
private void init(){
initNewComponent();
addNumListener();
pan.setLayout(new GridLayout(4,4));
setTitle("计算器");
pan.add(num7);
pan.add(num8);
pan.add(num9);
pan.add(add);
pan.add(num4);
pan.add(num5);
pan.add(num6);
pan.add(sub);
pan.add(num1);
pan.add(num2);
pan.add(num3);
pan.add(mul);
pan.add(num0);
pan.add(point);
pan.add(equ);
pan.add(div);
point.addActionListener(this);
add.addActionListener(this);
sub.addActionListener(this);
mul.addActionListener(this);
div.addActionListener(this);
equ.addActionListener(this);
clearScreen.addActionListener(this);
add(result,BorderLayout.NORTH);
add(pan,BorderLayout.CENTER);
add(clearScreen,BorderLayout.SOUTH);
pack();
setLocation(300,200);
setResizable(false);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==point){
StringBuffer buffer = new StringBuffer();
String temp = result.getText();
if("".equals(temp)){
return;
}else{
for(int i=0; i<temp.length(); i++){
if(temp.charAt(i)=='.'){
return;
}
}
}
buffer.append(temp);
buffer.append(".");
result.setText(buffer.toString());
}
if(e.getSource()==add){
operator.put("oper",'+');
if(!isEmpty()){
numberFirstFormat();
clearText();
}
}
if(e.getSource()==sub){
operator.put("oper",'-');
if(!isEmpty()){
numberFirstFormat();
clearText();
}
}
if(e.getSource()==mul){
operator.put("oper",'*');
if(!isEmpty()){
numberFirstFormat();
clearText();
}
}
if(e.getSource()==div){
operator.put("oper",'/');
if(!isEmpty()){
numberFirstFormat();
clearText();
}
}
if(e.getSource()==equ){
if(!isEmpty()&& null!=operator.get("oper")){
numberSecondFormat();
getResult();
}
}
if(e.getSource()==clearScreen){
clearText();
}
}
private void initNewComponent(){
number = new HashMap<String,Object>();
operator = new HashMap<String,Character>();
result = new JTextField(20);
num0 = new JButton("0");
num1 = new JButton("1");
num2 = new JButton("2");
num3 = new JButton("3");
num4 = new JButton("4");
num5 = new JButton("5");
num6 = new JButton("6");
num7 = new JButton("7");
num8 = new JButton("8");
num9 = new JButton("9");
point = new JButton(".");
add = new JButton("+");
sub = new JButton("-");
mul = new JButton("*");
div = new JButton("/");
equ = new JButton("=");
clearScreen = new JButton("clear screen");
pan = new JPanel();
result.setEditable(false);
}
private void numberFirstFormat(){
String temp = result.getText();
for(int i=0; i<temp.length(); i++){
if( '.'== temp.charAt(i)){
number.put("first",Float.parseFloat(temp));
return;
}
}
number.put("first",Integer.parseInt(temp));
}
private void numberSecondFormat(){
String temp = result.getText();
for(int i=0; i<temp.length(); i++){
if( '.'== temp.charAt(i)){
number.put("second",Float.parseFloat(temp));
return;
}
}
number.put("second",Integer.parseInt(temp));
}
private void getResult(){
Object o1 = number.get("first");
Object o2 = number.get("second");
switch(operator.get("oper")){
case '+': { result.setText(new Envir(new AddCalcue()).calNum(o1,o2).toString());
break;
}
case '-': { result.setText(new Envir(new SubCalcue()).calNum(o1,o2).toString());
break;
}
case '*': { result.setText(new Envir(new MulCalcue()).calNum(o1,o2).toString());
break;
}
case '/': { result.setText(new Envir(new DivCalcue()).calNum(o1,o2).toString());
break;
}
}
}
private boolean isEmpty(){
return "".equals(result.getText());
}
private void clearText(){
result.setText("");
}
private void addNumListener(){
num0.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
StringBuffer buffer = new StringBuffer();
String temp = result.getText();
buffer.append(temp);
buffer.append("0");
result.setText(buffer.toString());
}
});
num1.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
StringBuffer buffer = new StringBuffer();
String temp = result.getText();
buffer.append(temp);
buffer.append("1");
result.setText(buffer.toString());
}
});
num2.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
StringBuffer buffer = new StringBuffer();
String temp = result.getText();
buffer.append(temp);
buffer.append("2");
result.setText(buffer.toString());
}
});
num3.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
StringBuffer buffer = new StringBuffer();
String temp = result.getText();
buffer.append(temp);
buffer.append("3");
result.setText(buffer.toString());
}
});
num4.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
StringBuffer buffer = new StringBuffer();
String temp = result.getText();
buffer.append(temp);
buffer.append("4");
result.setText(buffer.toString());
}
});
num5.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
StringBuffer buffer = new StringBuffer();
String temp = result.getText();
buffer.append(temp);
buffer.append("5");
result.setText(buffer.toString());
}
});
num6.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
StringBuffer buffer = new StringBuffer();
String temp = result.getText();
buffer.append(temp);
buffer.append("6");
result.setText(buffer.toString());
}
});
num7.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
StringBuffer buffer = new StringBuffer();
String temp = result.getText();
buffer.append(temp);
buffer.append("7");
result.setText(buffer.toString());
}
});
num8.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
StringBuffer buffer = new StringBuffer();
String temp = result.getText();
buffer.append(temp);
buffer.append("8");
result.setText(buffer.toString());
}
});
num9.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
StringBuffer buffer = new StringBuffer();
String temp = result.getText();
buffer.append(temp);
buffer.append("9");
result.setText(buffer.toString());
}
});
}
public static void main(String[] args) {
new Compute();
}
}