一个java开发的超精简计算器。

初学java,写个精简的计算器,算是第一个小作业。

 

package com.summer.practice;

import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedList;
import javax.swing.JButton;

public class MyFrame extends JFrame {
 
 /**一个链表,每个元素都是一个String,这个链表用于存放算式的左值,符号,右值*/
 LinkedList<String> linkedList;
 
 /**三个Panel,一个是显示区,一个是数字按钮区 ,一个是运算符区 */
 JPanel p1;
 JPanel p2;
 JPanel p3;
 
 JTextField field;

 /**构造函数,MyFrame上贴上三个Panel,每个Panel都调用各自的处理函数进行处理,布局*/
 public MyFrame() {
  super("calculator");
  setSize(400, 300);
  setDefaultCloseOperation(EXIT_ON_CLOSE);
  p1 = new JPanel();
  p1.setBounds(0, 0, 300, 30);
  p1_layout();
  p2 = new JPanel();
  p2_layout();
  p2.setBounds(0, 30, 200, 200);
  p3 = new JPanel();
  p3_layout();
  p3.setBounds(230, 30, 150, 200);
  setLayout(null);
  add(p1);
  add(p2);
  add(p3);
  setVisible(true);

  linkedList = new LinkedList<String>();
 }

 /**第3个Panel,上面添加的运算符,以及每一个运算符被按下时的监听器*/
 private void p3_layout() {
  JButton bt_add = new JButton("+");

  bt_add.addActionListener(new ActionListener() {

   @Override
   public void actionPerformed(ActionEvent e) {
    switch (linkedList.size()) {
    case 0:
     break;
    case 1:
     linkedList.add("+");
     break;
    case 2:
     break;
    case 3:
     operate(linkedList);
     linkedList.add("+");
     field.setText(linkedList.getFirst());
     break;
    default:
     break;
    }

   }

  });
  JButton bt_sub = new JButton("-");
  bt_sub.addActionListener(new ActionListener() {

   @Override
   public void actionPerformed(ActionEvent e) {
    switch (linkedList.size()) {
    case 0:
     break;
    case 1:
     linkedList.add("-");
     break;
    case 2:
     break;
    case 3:
     operate(linkedList);
     linkedList.add("-");
     field.setText(linkedList.getFirst());
     break;
    default:
     break;
    }

   }

  });
  JButton bt_mul = new JButton("*");
  bt_mul.addActionListener(new ActionListener() {

   @Override
   public void actionPerformed(ActionEvent e) {
    switch (linkedList.size()) {
    case 0:
     break;
    case 1:
     linkedList.add("*");
     break;
    case 2:
     break;
    case 3:
     operate(linkedList);
     linkedList.add("*");
     field.setText(linkedList.getFirst());
     break;
    default:
     break;
    }

   }

  });
  JButton bt_div = new JButton("/");
  bt_div.addActionListener(new ActionListener() {

   @Override
   public void actionPerformed(ActionEvent e) {
    switch (linkedList.size()) {
    case 0:
     break;
    case 1:
     linkedList.add("/");
     break;
    case 2:
     break;
    case 3:
     operate(linkedList);
     linkedList.add("/");
     field.setText(linkedList.getFirst());
     break;
    default:
     break;
    }

   }

  });
  JButton bt_equ = new JButton("=");
  bt_equ.addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent e) {
    if (linkedList.size() == 3) {
     operate(linkedList);
     field.setText(linkedList.getFirst());
    }

   }

  });

  JButton bt_clr = new JButton("C");
  bt_clr.addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent e) {
    linkedList.removeAll(linkedList);
    field.setText("0");

   }

  });
  p3.setLayout(new GridLayout(3, 2));
  p3.add(bt_add);
  p3.add(bt_sub);
  p3.add(bt_mul);
  p3.add(bt_div);
  p3.add(bt_equ);
  p3.add(bt_clr);
 }

 /**operate函数用于把linkedList中的算式计算出来,如x+y,因x+y=z,直接把z存进去*/
 protected void operate(LinkedList<String> linkedList) {
  char op = linkedList.get(1).charAt(0);
  switch (op) {
  case '+':
   double left = Double.parseDouble(linkedList.getFirst());
   double right = Double.parseDouble(linkedList.get(2));
   double result = left + right;
   linkedList.removeAll(linkedList);
   linkedList.add("" + result);
   break;
  case '-':
   left = Double.parseDouble(linkedList.getFirst());
   right = Double.parseDouble(linkedList.get(2));
   result = left - right;
   linkedList.removeAll(linkedList);
   linkedList.add("" + result);
   break;
  case '*':
   left = Double.parseDouble(linkedList.getFirst());
   right = Double.parseDouble(linkedList.get(2));
   result = left * right;
   linkedList.removeAll(linkedList);
   linkedList.add("" + result);
   break;
  case '/':
   left = Double.parseDouble(linkedList.getFirst());
   right = Double.parseDouble(linkedList.get(2));
   result = left / right;
   linkedList.removeAll(linkedList);
   linkedList.add("" + result);
   break;
  }

 }

 /**第2个Panel,添加数字按钮,以及它们的监听处理函数*/
 private void p2_layout() {
  JButton bt[] = new JButton[10];
  p2.setLayout(new GridLayout(3, 4));
  for (int i = 0; i < 10; i++) {
   bt[i] = new JButton("" + i);
   p2.add(bt[i]);
  }

  bt[0].addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent e) {
    switch (linkedList.size()) {
    case 0:
     linkedList.add("" + 0);
     field.setText("" + 0);
     break;
    case 1:
     String str = linkedList.getFirst();
     linkedList.remove();
     linkedList.addFirst(str + 0);
     field.setText(linkedList.get(0));
     break;
    case 2:
     linkedList.add("" + 0);
     field.setText("" + 0);
     break;
    case 3:
     str = linkedList.get(2);
     linkedList.remove(2);
     linkedList.add(str + 0);
     field.setText(linkedList.get(2));
    default:
     break;
    }

   }

  });

  bt[1].addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent e) {
    switch (linkedList.size()) {
    case 0:
     linkedList.add("" + 1);
     field.setText("" + 1);
     break;
    case 1:
     String str = linkedList.getFirst();
     linkedList.remove();
     linkedList.addFirst(str + 1);
     field.setText(linkedList.get(0));
     break;
    case 2:
     linkedList.add("" + 1);
     field.setText("" + 1);
     break;
    case 3:
     str = linkedList.get(2);
     linkedList.remove(2);
     linkedList.add(str + 1);
     field.setText(linkedList.get(2));
    default:
     break;
    }

   }

  });

  bt[2].addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent e) {
    switch (linkedList.size()) {
    case 0:
     linkedList.add("" + 2);
     field.setText("" + 2);
     break;
    case 1:
     String str = linkedList.getFirst();
     linkedList.remove();
     linkedList.addFirst(str + 2);
     field.setText(linkedList.get(0));
     break;
    case 2:
     linkedList.add("" + 2);
     field.setText("" + 2);
     break;
    case 3:
     str = linkedList.get(2);
     linkedList.remove(2);
     linkedList.add(str + 2);
     field.setText(linkedList.get(2));
    default:
     break;
    }

   }

  });

  bt[3].addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent e) {
    switch (linkedList.size()) {
    case 0:
     linkedList.add("" + 3);
     field.setText("" + 3);
     break;
    case 1:
     String str = linkedList.getFirst();
     linkedList.remove();
     linkedList.addFirst(str + 3);
     field.setText(linkedList.get(0));
     break;
    case 2:
     linkedList.add("" + 3);
     field.setText("" + 3);
     break;
    case 3:
     str = linkedList.get(2);
     linkedList.remove(2);
     linkedList.add(str + 3);
     field.setText(linkedList.get(2));
    default:
     break;
    }

   }

  });

  bt[4].addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent e) {
    switch (linkedList.size()) {
    case 0:
     linkedList.add("" + 4);
     field.setText("" + 4);
     break;
    case 1:
     String str = linkedList.getFirst();
     linkedList.remove();
     linkedList.addFirst(str + 4);
     field.setText(linkedList.get(0));
     break;
    case 2:
     linkedList.add("" + 4);
     field.setText("" + 4);
     break;
    case 3:
     str = linkedList.get(2);
     linkedList.remove(2);
     linkedList.add(str + 4);
     field.setText(linkedList.get(2));
    default:
     break;
    }

   }

  });

  bt[5].addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent e) {
    switch (linkedList.size()) {
    case 0:
     linkedList.add("" + 5);
     field.setText("" + 5);
     break;
    case 1:
     String str = linkedList.getFirst();
     linkedList.remove();
     linkedList.addFirst(str + 5);
     field.setText(linkedList.get(0));
     break;
    case 2:
     linkedList.add("" + 5);
     field.setText("" + 5);
     break;
    case 3:
     str = linkedList.get(2);
     linkedList.remove(2);
     linkedList.add(str + 5);
     field.setText(linkedList.get(2));
    default:
     break;
    }

   }

  });

  bt[6].addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent e) {
    switch (linkedList.size()) {
    case 0:
     linkedList.add("" + 6);
     field.setText("" + 6);
     break;
    case 1:
     String str = linkedList.getFirst();
     linkedList.remove();
     linkedList.addFirst(str + 6);
     field.setText(linkedList.get(0));
     break;
    case 2:
     linkedList.add("" + 6);
     field.setText("" + 6);
     break;
    case 3:
     str = linkedList.get(2);
     linkedList.remove(2);
     linkedList.add(str + 6);
     field.setText(linkedList.get(2));
    default:
     break;
    }

   }

  });

  bt[7].addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent e) {
    switch (linkedList.size()) {
    case 0:
     linkedList.add("" + 7);
     field.setText("" + 7);
     break;
    case 1:
     String str = linkedList.getFirst();
     linkedList.remove();
     linkedList.addFirst(str + 7);
     field.setText(linkedList.get(0));
     break;
    case 2:
     linkedList.add("" + 7);
     field.setText("" + 7);
     break;
    case 3:
     str = linkedList.get(2);
     linkedList.remove(2);
     linkedList.add(str + 7);
     field.setText(linkedList.get(2));
    default:
     break;
    }

   }

  });

  bt[8].addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent e) {
    switch (linkedList.size()) {
    case 0:
     linkedList.add("" + 8);
     field.setText("" + 8);
     break;
    case 1:
     String str = linkedList.getFirst();
     linkedList.remove();
     linkedList.addFirst(str + 8);
     field.setText(linkedList.get(0));
     break;
    case 2:
     linkedList.add("" + 8);
     field.setText("" + 8);
     break;
    case 3:
     str = linkedList.get(2);
     linkedList.remove(2);
     linkedList.add(str + 8);
     field.setText(linkedList.get(2));
    default:
     break;
    }

   }

  });

  bt[9].addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent e) {
    switch (linkedList.size()) {
    case 0:
     linkedList.add("" + 9);
     field.setText("" + 9);
     break;
    case 1:
     String str = linkedList.getFirst();
     linkedList.remove();
     linkedList.addFirst(str + 9);
     field.setText(linkedList.get(0));
     break;
    case 2:
     linkedList.add("" + 9);
     field.setText("" + 9);
     break;
    case 3:
     str = linkedList.get(2);
     linkedList.remove(2);
     linkedList.add(str + 9);
     field.setText(linkedList.get(2));
    default:
     break;
    }

   }

  });

 }

 /**第1个Panel,贴上显示区TextField类型的field*/
 private void p1_layout() {
  field = new JTextField("0", 20);
  field.setHorizontalAlignment(JTextField.RIGHT);
  field.setEditable(false);
  p1.add(field);

 }

 /**主函数,用于启动程序*/
 public static void main(String args[]) {
  new MyFrame();
 }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值