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();
 }
}

posted @ 2013-08-03 19:07  学海无涯_小波  阅读(649)  评论(0)    收藏  举报