`
java.wj
  • 浏览: 9736 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

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
分享到:
评论
3 楼 月亮不懂夜的黑 2010-03-14  
很是可以啊,我也在做计算器就进来观摩一下,比我的强悍多了。
2 楼 myreligion 2010-01-28  
我记得我们数据结构的书上说,计算器的实现方式是堆栈。按照堆栈运算才容易实现复杂运算,如:16 + 354 * 5 -(34 + 22*2)...
1 楼 pch272215690 2010-01-27  
swing啊,周末没事的时候研究研究

相关推荐

    计算器java源码

    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技术实现的计算器源码

    本篇将详细讲解如何使用Java Swing技术开发一个按钮式计算器,包括Swing组件的创建、计算器界面的设计、动作事件处理机制以及计算器功能的实现。 首先,要使用Swing,你需要导入必要的包,即`javax.swing.*`和`java...

    Eclipse JAVA 计算器源码 适合初学者

    本项目提供了一个简单的Java计算器源码,适用于Java初学者进行学习和分析。该计算器可以被直接复制到Eclipse IDE中运行,并通过逐步阅读和理解源码来增强对Java编程的理解。 #### 二、环境搭建与运行 1. **开发...

    计算器 源码 java

    - **`javax.swing.*`**:这是Swing库的一部分,提供了创建GUI(图形用户界面)所需的组件。 - **`java.awt.*`**:这是AWT库的一部分,也提供了一些基本的GUI组件和支持功能。 - **`java.awt.event.*`**:用于处理...

    第4周作业-贷款计算器程序

    import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.s

    java版五子棋游戏源码-Java_Games_Projects:用Java开发的游戏/项目,图形使用Java.awt/Javax.swing

    java版五子棋游戏源码Jave_Games_Projects 这个 repo 包含一些用 JAVA 编程的游戏和项目。 作者 理查德·吴 2017 笔记 当我在高中第一次接触编程时,我开发它们是为了好玩。 一些源代码在这个 repo 中,一些源代码...

    java计算器源程序

    import javax.swing.*; import javax.swing.event.*; import java.awt.event.*; import java.text.DecimalFormat; public class Calculator implements ActionListener { JFrame frame; JTextField textAnswer...

    JAVA程序设计课程作业——标准计算器的实现报告[收集].pdf

    在该计算器程序中,我们使用了 JAVASwing 库来设计图形用户界面,并使用了 ActionEvent 机制来处理按钮的点击事件。在构造函数中,我们初始化了所有的组件,并设置了它们的属性。在 ActionListener 中,我们实现了...

    java计算器源码

    本项目以"java计算器源码"为主题,将深入探讨如何利用Java语言和Swing库来构建一个基本的图形用户界面(GUI)计算器。Swing是Java提供的一种用于构建桌面应用程序的组件库,它基于Java AWT(Abstract Window Toolkit...

    Java_Calculator_Source_Code.rar_java计算器代码

    Java计算器源码是一个典型的编程项目,它展示了如何在Java中实现一个简单的图形用户界面(GUI)应用程序。这个项目可能是为了帮助学生理解面向对象编程、事件处理以及GUI设计的基础知识。以下将详细介绍Java计算器的...

    我找过来的计算器源程序

    - **`javax.swing.*`**: 提供了更高级的用户界面组件,这些组件比`java.awt.*`中的组件更加美观且功能丰富。 ### 2. 创建计算器类 代码定义了一个名为`Calculator`的公共类,该类继承自`JFrame`,即Java Swing中的...

    java课程设计--计算器(带源码).pdf

    学生首先导入必要的包,如`java.awt`和`javax.swing`,这些包包含了创建图形用户界面的类。然后定义`Calculator`类并实现`ActionListener`接口,以便处理按钮点击事件。接着,创建一个`JFrame`作为计算器的主窗口,...

    java 大整数计算器 包含源代码

    import javax.swing.*; public class Ca { // main public static void main(String args[]) { CaculatorFrame1 frame = new CaculatorFrame1(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ...

    计算器的Java源码

    计算器的Java源代码,涉及到图形用户界面,事件监听,异常,基本数据类型的封装类等知识。

    java编写的计算器与记事本程序

    此外,可能还使用了`javax.swing`库来构建图形用户界面(GUI),包括文本框、菜单栏和对话框等组件。理解这些组件的工作原理以及如何将它们整合到一起,对于构建交互式应用程序至关重要。 在分析源码的过程中,你...

    一个Java的计算器

    import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class CalculatorGUI extends JFrame { private JTextField displayField; ...

    200多个自己编的java程序

    标签中的“控件”指的是Java GUI中的组件,如按钮、文本框、菜单等,这些都是通过`java.awt`和`javax.swing`包提供的类实现的。“源码”意味着我们可以看到完整的程序代码,便于学习和理解。“综合应用”可能指的是...

    图形用户界面_java_图形用户界面_

    要创建一个Java Applet,你需要继承`java.applet.Applet`类或`javax.swing.JApplet`类,并重写必要的方法,如`paint()`和`init()`。`init()`方法在Applet加载时调用,用于初始化组件和设置布局。`paint()`方法则负责...

    JAVA程序设计课程作业——标准计算器的实现报告.doc

    源码中引入了`java.awt`和`javax.swing`包,这些是JAVA GUI编程的核心库,用于创建窗口、组件、菜单和事件处理。`Calculator`类实现了`ActionListener`接口,表明它能处理按钮点击事件。在类中定义了各种按钮、...

    java扫雷源码

    import javax.swing.ImageIcon; import javax.swing.JFrame; import com.kerence.mine.data_structure.MineMatrix; import com.kerence.mine.mineGUI.dialog.JEnterNameDialog; import ...

Global site tag (gtag.js) - Google Analytics