javax.swing 写的计算器 提供源码

java写的计算器
功能也算完整吧 大家也可以测测 给点意见


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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值