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
分享到:
相关推荐
import javax.swing.JTextField; @SuppressWarnings("serial") public class testCalculator extends Frame { GridLayout g1; Button b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15; Panel p1,p2;...
本篇将详细讲解如何使用Java Swing技术开发一个按钮式计算器,包括Swing组件的创建、计算器界面的设计、动作事件处理机制以及计算器功能的实现。 首先,要使用Swing,你需要导入必要的包,即`javax.swing.*`和`java...
本项目提供了一个简单的Java计算器源码,适用于Java初学者进行学习和分析。该计算器可以被直接复制到Eclipse IDE中运行,并通过逐步阅读和理解源码来增强对Java编程的理解。 #### 二、环境搭建与运行 1. **开发...
- **`javax.swing.*`**:这是Swing库的一部分,提供了创建GUI(图形用户界面)所需的组件。 - **`java.awt.*`**:这是AWT库的一部分,也提供了一些基本的GUI组件和支持功能。 - **`java.awt.event.*`**:用于处理...
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.s
java版五子棋游戏源码Jave_Games_Projects 这个 repo 包含一些用 JAVA 编程的游戏和项目。 作者 理查德·吴 2017 笔记 当我在高中第一次接触编程时,我开发它们是为了好玩。 一些源代码在这个 repo 中,一些源代码...
import javax.swing.*; import javax.swing.event.*; import java.awt.event.*; import java.text.DecimalFormat; public class Calculator implements ActionListener { JFrame frame; JTextField textAnswer...
在该计算器程序中,我们使用了 JAVASwing 库来设计图形用户界面,并使用了 ActionEvent 机制来处理按钮的点击事件。在构造函数中,我们初始化了所有的组件,并设置了它们的属性。在 ActionListener 中,我们实现了...
本项目以"java计算器源码"为主题,将深入探讨如何利用Java语言和Swing库来构建一个基本的图形用户界面(GUI)计算器。Swing是Java提供的一种用于构建桌面应用程序的组件库,它基于Java AWT(Abstract Window Toolkit...
Java计算器源码是一个典型的编程项目,它展示了如何在Java中实现一个简单的图形用户界面(GUI)应用程序。这个项目可能是为了帮助学生理解面向对象编程、事件处理以及GUI设计的基础知识。以下将详细介绍Java计算器的...
- **`javax.swing.*`**: 提供了更高级的用户界面组件,这些组件比`java.awt.*`中的组件更加美观且功能丰富。 ### 2. 创建计算器类 代码定义了一个名为`Calculator`的公共类,该类继承自`JFrame`,即Java Swing中的...
学生首先导入必要的包,如`java.awt`和`javax.swing`,这些包包含了创建图形用户界面的类。然后定义`Calculator`类并实现`ActionListener`接口,以便处理按钮点击事件。接着,创建一个`JFrame`作为计算器的主窗口,...
import javax.swing.*; public class Ca { // main public static void main(String args[]) { CaculatorFrame1 frame = new CaculatorFrame1(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ...
计算器的Java源代码,涉及到图形用户界面,事件监听,异常,基本数据类型的封装类等知识。
此外,可能还使用了`javax.swing`库来构建图形用户界面(GUI),包括文本框、菜单栏和对话框等组件。理解这些组件的工作原理以及如何将它们整合到一起,对于构建交互式应用程序至关重要。 在分析源码的过程中,你...
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class CalculatorGUI extends JFrame { private JTextField displayField; ...
标签中的“控件”指的是Java GUI中的组件,如按钮、文本框、菜单等,这些都是通过`java.awt`和`javax.swing`包提供的类实现的。“源码”意味着我们可以看到完整的程序代码,便于学习和理解。“综合应用”可能指的是...
要创建一个Java Applet,你需要继承`java.applet.Applet`类或`javax.swing.JApplet`类,并重写必要的方法,如`paint()`和`init()`。`init()`方法在Applet加载时调用,用于初始化组件和设置布局。`paint()`方法则负责...
源码中引入了`java.awt`和`javax.swing`包,这些是JAVA GUI编程的核心库,用于创建窗口、组件、菜单和事件处理。`Calculator`类实现了`ActionListener`接口,表明它能处理按钮点击事件。在类中定义了各种按钮、...
import javax.swing.ImageIcon; import javax.swing.JFrame; import com.kerence.mine.data_structure.MineMatrix; import com.kerence.mine.mineGUI.dialog.JEnterNameDialog; import ...