您的位置:首页 > 编程语言 > Java开发

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

2010-06-09 13:16 260 查看
初学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();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: