java写的计算器
功能也算完整吧 大家也可以测测 给点意见
同时也压缩了 供大家下载
另外也有 坦克大战和贪吃蛇的代码
http://www.iteye.com/topic/574719
http://www.iteye.com/topic/576422
功能也算完整吧 大家也可以测测 给点意见
import java.awt.*;
import java.awt.event.*;
import java.math.*;
import javax.swing.*;
/**
* @author wangjun
*
*/
public class JTest extends JFrame {
/**
* 定义按扭窗口
*/
ResultStr resultStr; // 显示框 继承JPanel
NumButtons numButtons; // 按钮面板 继承JPanel
MopButs mopButs;
// JButton butCE = new JButton("CE"); //ce按钮
CEB ceb;
// 当点击按钮+、-、*、/ = 时,isE = true
boolean isE = false;
// 当i=0时说明是我们第一次输入,显示内容为 0 根据输入的情况设置显示内容
int i = 0;
// 存放显示的内容
String text = "";
// 存放点击运算符按钮之前的数值
double defbutton = 0;
// 运算符
String op = "";
// 上一次的按键
String lastKey = null;
private void myInit() {
resultStr = new ResultStr(); // 显示框对象
numButtons = new NumButtons();// 按钮面板对象
ceb = new CEB();// 特殊按钮面板对象 CE Backspace
mopButs = new MopButs();
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(mopButs, BorderLayout.WEST);
panel.add(resultStr, BorderLayout.NORTH);
panel.add(ceb, BorderLayout.SOUTH);
panel.add(numButtons, BorderLayout.CENTER);
//this.setIconImage( ));
//this.setIconImage(image)
setBounds(200, 200, 350, 220);
// 关闭时 退出程序
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(panel);
// 按钮 0-9 & . 添加监听器 数字按钮监听器
numButtons.button0.addActionListener(numberLister);
numButtons.button1.addActionListener(numberLister);
numButtons.button2.addActionListener(numberLister);
numButtons.button3.addActionListener(numberLister);
numButtons.button4.addActionListener(numberLister);
numButtons.button5.addActionListener(numberLister);
numButtons.button6.addActionListener(numberLister);
numButtons.button7.addActionListener(numberLister);
numButtons.button8.addActionListener(numberLister);
numButtons.button9.addActionListener(numberLister);
numButtons.buttonpoint.addActionListener(numberLister);
// 按钮 +-*/= 添加监听器 运算符按钮监听器
numButtons.buttonA.addActionListener(opLister);
numButtons.buttonB.addActionListener(opLister);
numButtons.buttonC.addActionListener(opLister);
numButtons.buttonD.addActionListener(opLister);
numButtons.buttonE.addActionListener(opLister);
// 按钮 sqrt % 1/x +/- CE 添加特殊按钮监听器
numButtons.butS.addActionListener(teOpLister);
numButtons.but5S.addActionListener(teOpLister);
numButtons.butDS.addActionListener(teOpLister);
numButtons.butFS.addActionListener(teOpLister);
ceb.butCE.addActionListener(teOpLister);
ceb.butBp.addActionListener(bp);
}
// 构造器
public JTest(String name) {
super(name);
myInit();
}
// 数字按扭监听器
ActionListener numberLister = new ActionListener() {
public void actionPerformed(ActionEvent event) {
JButton b = (JButton) event.getSource();
// 按下 1 2 3 4 5 6 7 8 9 时的情况
if (b.getText() != "0" && b.getText() != ".") {
if (isE == true || i == 0) {
resultStr.rsStr.setText(b.getText());
} else {
text = resultStr.rsStr.getText();
if (Float.parseFloat(text) == 0) {
if (text.indexOf(".") != -1) {
resultStr.rsStr.setText(text + b.getText());
} else {
resultStr.rsStr.setText(b.getText());
}
} else {
resultStr.rsStr.setText(text + b.getText());
}
}
isE = false;
i = 1;
}
// 0 的情况
if (b.getText() == "0") {
if (isE == true || i == 0) {
resultStr.rsStr.setText(b.getText());
isE = false;
i = 1;
} else {
/*
* 判断条件如果text中的数值=0保持不变 不等于 0
* 判断在这个数值中是否有.存在?如果有那么就在原来数值基础之上添 加0;否则保持原来的数值不变
*/
text = resultStr.rsStr.getText();
if (Float.parseFloat(text) != 0) {
resultStr.rsStr.setText(text + "0");
} else {
if (text.trim().indexOf(".") == -1) {
resultStr.rsStr.setText(text);
} else {
resultStr.rsStr.setText(text + "0");
}
}
}
}
// . 的情况
if (b.getText() == ".") {
if (isE == true || i == 0) {
resultStr.rsStr.setText("0.");
isE = false;
i = 1;
} else {
text = resultStr.rsStr.getText();
if (text.trim().indexOf(".") == -1) {
resultStr.rsStr.setText(text + ".");
} else {
resultStr.rsStr.setText(text);
}
}
isE = false;
i = 1;
}
lastKey = b.getText();
}
};
// + - * / = 按扭监听器
ActionListener opLister = new ActionListener() {
public void actionPerformed(ActionEvent event) {
JButton b = (JButton) event.getSource();
if (lastKey != "+" && lastKey != "-" && lastKey != "*"
&& lastKey != "/") {
// 如果lastKey 不是运算符 做相应的运算 否则不变
if (b.getText() != "=") {
if (op != "") {
getRsStr(true); // 计算结果 true 为不是按 = 计算
} else {
defbutton = Double.parseDouble(resultStr.rsStr
.getText());
}
isE = true;
i = 0;
} else {
getRsStr(false); // 计算结果 false 为按 = 计算
}
}
// 最后记录相应的信息
op = b.getText();
lastKey = b.getText();
defbutton = Double.parseDouble(resultStr.rsStr.getText());
}
};
// 计算结果 当按下+ - * / 计算时参数是true 否则为 false
public void getRsStr(boolean bl) {
if (op != "") {
Double d = Double.parseDouble(resultStr.rsStr.getText());
if (op == "+") {
resultStr.rsStr.setText(String.valueOf(defbutton + d));
}
if (op == "-") {
resultStr.rsStr.setText(String.valueOf(defbutton - d));
}
if (op == "*") {
resultStr.rsStr.setText(String.valueOf(defbutton * d));
}
if (op == "/") {
resultStr.rsStr.setText(String.valueOf(defbutton / d));
}
if (bl == false) { // 按钮 = 计算后 清空 否则不用清空
i = 0;
text = "";
}
}
}
// sqrt % 1/x +/- 按扭监听器
ActionListener teOpLister = new ActionListener() {
public void actionPerformed(ActionEvent event) {
JButton b = (JButton) event.getSource();
try {
defbutton = Double.parseDouble(resultStr.rsStr.getText());
if (b.getText() == "sqrt") {
resultStr.rsStr.setText(String
.valueOf(Math.sqrt(defbutton)));
}
if (b.getText() == "%") {
// 未计算
// resultStr.rsStr.setText(String.valueOf(defbutton*100));
}
if (b.getText() == "1/x") {
resultStr.rsStr.setText(String.valueOf(1 / defbutton));
}
if (b.getText() == "+/-") {
resultStr.rsStr.setText(String.valueOf(-defbutton));
}
if (b.getText() == "C") {
resultStr.rsStr.setText("0");
}
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
resultStr.rsStr.setText("0");
e.printStackTrace();
}
i = 0;
text = "";
op = "";
defbutton = 0.0;
lastKey = b.getText();
}
};
// Backspace 监听器
ActionListener bp = new ActionListener() {
public void actionPerformed(ActionEvent event) {
// 保存显示内容
String str = resultStr.rsStr.getText();
if (str.length() > 1) {
// 显示内容的长度大于1时 去掉最后一位
str = str.substring(0, str.length() - 1);
resultStr.rsStr.setText(str);
// 去掉后如果 最后一位是 . 也去掉
if (resultStr.rsStr.getText().indexOf(".") == resultStr.rsStr
.getText().length() - 1) {
resultStr.rsStr.setText(resultStr.rsStr.getText()
.substring(0,
resultStr.rsStr.getText().length() - 1));
}
}
// 否则显示为 0
else {
str = "0";
resultStr.rsStr.setText(str);
}
lastKey = "Backspace";
}
};
public static void main(String[] args) {
// TODO Auto-generated method stub
JTest m = new JTest("计算器");
m.setVisible(true);
}
}
class ResultStr extends JPanel {
JTextField rsStr = new JTextField("0");
ResultStr() {
rsStr.setHorizontalAlignment(SwingConstants.RIGHT);
rsStr.enable(false);
rsStr.setFont(new Font("宋体",5,24));
setLayout(new BorderLayout());
add(rsStr, BorderLayout.CENTER);
}
}
class NumButtons extends JPanel {
JButton button1 = new JButton("1");
JButton button2 = new JButton("2");
JButton button3 = new JButton("3");
JButton button4 = new JButton("4");
JButton button5 = new JButton("5");
JButton button6 = new JButton("6");
JButton button7 = new JButton("7");
JButton button8 = new JButton("8");
JButton button9 = new JButton("9");
JButton button0 = new JButton("0");
JButton buttonpoint = new JButton(".");
JButton buttonA = new JButton("+");
JButton buttonB = new JButton("-");
JButton buttonC = new JButton("*");
JButton buttonD = new JButton("/");
JButton buttonE = new JButton("=");
JButton butS = new JButton("sqrt");
JButton but5S = new JButton("%");
JButton butDS = new JButton("1/x");
JButton butFS = new JButton("+/-");
NumButtons() {
setLayout(new GridLayout(4, 5));
add(button1);
add(button2);
add(button3);
add(buttonA);
add(butS);
add(button4);
add(button5);
add(button6);
add(buttonB);
add(but5S);
add(button7);
add(button8);
add(button9);
add(buttonC);
add(butDS);
add(button0);
add(buttonpoint);
add(buttonD);
add(buttonE);
add(butFS);
}
}
class CEB extends JPanel {
JButton butCE = new JButton("C");
JButton butBp = new JButton("Backspace");
CEB() {
setLayout(new GridLayout(1, 2));
add(butCE);
add(butBp);
}
}
class MopButs extends JPanel {
JButton mAdd = new JButton("M+");
JButton mC = new JButton("MC");
JButton mR = new JButton("MR");
JButton mS = new JButton("MS");
MopButs() {
setLayout(new GridLayout(4, 1));
add(mC);
add(mR);
add(mS);
add(mAdd);
}
}
同时也压缩了 供大家下载
另外也有 坦克大战和贪吃蛇的代码
http://www.iteye.com/topic/574719
http://www.iteye.com/topic/576422