`
wz94
  • 浏览: 31530 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

计算器功能实现

阅读更多

 

    计算器界面的实现在之前swing组件那节课已经完成。这一篇总结来写功能的实现。
              
 

 

一、添加监听器方法

 

下边是之前实例化的二十个按钮,包括10个数字,加(+)减(-)乘(*)除(/)乘方(x2)取余(%)

取绝对值(abs)等于(=)和清零(AC)

//实例化二十个JButton对象
		JButton jba = new JButton("AC");
		JButton jbb = new JButton("x2");
		JButton jbc = new JButton("abs");
		JButton jbd = new JButton("%");
		JButton jbe = new JButton("1");
		JButton jbf = new JButton("2");
		JButton jbg = new JButton("3");
		JButton jbh = new JButton("+");
		jbh.setFont(new Font("",0,20));
		JButton jbi = new JButton("4");
		JButton jbj = new JButton("5");
		JButton jbk = new JButton("6");
		JButton jbl = new JButton("-");
		jbl.setFont(new Font("",0,30));
		JButton jbm = new JButton("7");
		JButton jbn = new JButton("8");
		JButton jbo = new JButton("9");
		JButton jbp = new JButton("*");
		jbp.setFont(new Font("",0,20));
		JButton jbq = new JButton("0");
		JButton jbr = new JButton(".");
		jbr.setFont(new Font("",0,20));
		JButton jbs = new JButton("=");
		jbs.setFont(new Font("",0,20));
		JButton jbt = new JButton("/");
		jbt.setFont(new Font("",0,20));

 给这二十个按钮添加事件监听器

//实例化一个监听器
		CalcuLoginListener cal = new CalcuLoginListener(jf,jteName);	
		
		
//     	jba.setActionCommand("AC");
//		jbb.setActionCommand("x2");
//		jbc.setActionCommand("abs");
//		jbd.setActionCommand("%");
//		jbe.setActionCommand("1");
//		jbf.setActionCommand("2");
//		jbg.setActionCommand("3");
//		jbh.setActionCommand("+");
//		jbi.setActionCommand("4");
//		jbj.setActionCommand("5");
//		jbk.setActionCommand("6");
//		jbl.setActionCommand("-");
//		jbm.setActionCommand("7");
//		jbn.setActionCommand("8");
//		jbo.setActionCommand("9");
//		jbp.setActionCommand("*");
//		jbq.setActionCommand("0");
//		jbr.setActionCommand(".");
//		jbs.setActionCommand("=");
//		jbt.setActionCommand("/");
		
		//监听每一个按钮
		jba.addActionListener(cal);
		jbb.addActionListener(cal);
		jbc.addActionListener(cal);
		jbd.addActionListener(cal);
		jbe.addActionListener(cal);
		jbf.addActionListener(cal);
		jbg.addActionListener(cal);
		jbh.addActionListener(cal);
		jbi.addActionListener(cal);
		jbj.addActionListener(cal);
		jbk.addActionListener(cal);
		jbl.addActionListener(cal);
		jbm.addActionListener(cal);
		jbn.addActionListener(cal);
		jbo.addActionListener(cal);
		jbp.addActionListener(cal);
		jbq.addActionListener(cal);
		jbr.addActionListener(cal);
		jbs.addActionListener(cal);
		jbt.addActionListener(cal);

 由于每个按钮都是不同的事件源,所以每个按钮都要添加监听器。

 

然后建立一个计算事件的处理类,该类实现ActionListener接口

 /**
   * 计算事件的处理类,该类实现ActionListener接口
   * @author Administrator
   *
   */
public class CalcuLoginListener implements ActionListener{
	private JButton jbu;
	private JTextArea jte;
	private JFrame jf;
	private int enterstyle,i;
	private String enter,jtestr="0",jtestr1="0",ope1="?",ope2,ope,result="0";
	
 	//enter表示要输入的字符(未显示到输入框内),jtestr表示保存的字符,ope1表示保存的运算符,ope表示保存的符号(两者区别在等号,等号会影响判断)
 
	//ope2表示当前运算符,result表示结算结果	
	
	//重载构造方法
	public CalcuLoginListener(JFrame jf,JTextArea jte){
		
		this.jf = jf;
		this.jte = jte;
		
	}
}

 

 

 

二、实现计算功能

    给按钮添加监听器以及监听器类的建立都比较简单,不过在设计实现计算功能的处理方法时要稍动点脑筋。大体上计算器的风格为两类,一种是输入一整串的数字和运算符后输出计算结果;另一种是边输入边输出结果。

     熊哥在课上讲的是第一种,对每个运算符依次编辑,当点击该运算符按钮时,提取显示出的该符号对应字符两边的字符串(运用字符串搜索、分割等方法),然后把两串字符串转化成对应的数字(Integer类里的parseInt方法)计算之后再重新转化为字符串输出。对于多种运算符先排好运算顺序再计算。

     我自己写时觉得第二种简单一些(现在看都差不多= =),输入一串数字,记住当前数字,在输入运算符时记住之前数字运算符的字符代替数字的字符串,记住运算符号,再输入数字代替运算符,计算出结果,当下次点击等号时,将结果输出。

 

 

1.在输入框内正确显示输出结果分析

       由于输入运算符与输入数字不同,所以每次输入都要进行判断该次输入的是什么,如果当前是数字输入的仍是数字,只需追加字符,不算状态更改;如果当前是数字输入的是运算符,则将数字改为运算符,算作状态更改;如果当前是运算符输入的是数字,则将运算符改为数字,算作状态更改;连续点击运算符的话、、、有必要么→ →。

      我们的目的是计算,而计算需要一个符号和两个数字,而输入会更改当前状态,所以对输入的数字和符号要进行“保存”,从第二次输入运算符(或等号)开始每次输入运算符进行状态更改时都要进行结算,算出当前结果,把之前保存的运算结果(第一次结算用之前保存的数字)和当前输出的数字进行运算,运算符是上次的符号(即保存的符号),每次结算完更新运算结果,并保存当前符号;若输入等号则直接结算并输出运算结果。

 

      为了方便追加字符,我把输入框的组件格式设置成了JTextArea,和JTextField比起来两个都能setText,getText,不过JTextArea有一个追加文本的函数append(还有插入文本的函数insert,在这个项目中用不到先记下),这样可以在每次输入数字时都可以不停的追加。

       为了方便判断,我将按钮分成了五组

public int Style(String st){
		if(st.equals("AC")||st.equals("x2")||st.equals("abs"))
			i = 1;
	    if(st.equals("+")||st.equals("-")||st.equals("*")||st.equals("/")||st.equals("%"))
			i = 2;
		if(st.equals("="))
			i = 3;
		if(st.equals("?"))
			i = 0;
		if(st.equals("0")||st.equals("1")||st.equals("2")||st.equals("3")||st.equals("4")||st.equals("5")||st.equals("6")||st.equals("7")||st.equals("8")||st.equals("9")||st.equals("."))
			i = 4;
		return i;
	}

 本来要将这个函数名设为kind的。。。结果用了style。。。。

“?”表示符号的初始状态,之前定义变量时将未输入时符号的初始状态设为“?”,即未输入或第0次的符号。

 

 2.实现运算

     定义一个运算方法,实现加减乘除

     //运算方法
 public void Calculater(String st1,String st2,String st3){
  
  int num1 = 0,num2 = 0,num;
  //将字符串转化为数字
  num1 = Integer.parseInt(st1);
  num2 = Integer.parseInt(st2);
  
  if(st3.equals("+"))
   num1 += num2;
  if(st3.equals("-"))
   num1 -= num2;
  if(st3.equals("*"))
   num1 = num1*num2;
  if(st3.equals("/"))
   num1 = num1/num2;
  if(st3.equals("%"))
   num1 = num1%num2;
  
  result = num1+"";//将数字转化为字符
  jte.setText(result);
 }        

    根据每次即将输入的按钮不同做判断进行运算并显示到输入框内

	/**
	 * 事件处理方法
	 */
	public void actionPerformed(ActionEvent e){
		
		//获取JButton上的字符
		enter =e.getActionCommand();
		//输入的style
		enterstyle = Style(enter);
		if(enterstyle == 3){//输入等号
			jtestr = jte.getText();//保存数字
			
			if(Style(ope1)==0)//之前未保存运算符,当前显示不变,并结算
				result = jte.getText();
			
			else if(Style(ope1)==2){//之前保存了运算符,结算,将运算符状态改为最初状态(未保存状态)
				Calculater(result,jtestr,ope1);
				ope1 = "?";
				}

			System.out.println(result);
	       
		   
		    ope = enter;//保存符号
		
		}
		
		if(enterstyle == 4){//若输入数字
			//当前显示等号、0的话直接将改变字符
			if(jte.getText().equals("="))
				jte.setText(enter);
			if(jte.getText().equals("0"))
				jte.setText(enter);
			
			else if(Style(jte.getText())==2){//当前显示为运算符,保存运算符再改变显示的字符
				ope1 = ope2;
				jte.setText(enter);
			}
			else//若显示为数字直接追加
				jte.append(enter);
			jtestr = jte.getText();
		}
		if(enterstyle == 2){//若要输入运算符
			//保存当前数字
			jtestr = jte.getText();
				
			if(Style(ope1)==0)//之前未输入运算符,此次为首次输入运算符,结算
				result = jte.getText();
			
			else if(Style(ope1)==2){//之前输入了运算符,结算
				Calculater(result,jtestr,ope1);
				ope1 = "?";
			}
				
			System.out.println(result);
			ope = enter;
			ope2 = ope;
			jte.setText(enter);
		}		
		if(enterstyle == 1){//输入其他符号不显示只计算
			if(enter.equals("AC")){//清空符号将所有变量恢复最初设置
				jte.setText("0");jtestr="0";ope1="?";result="0";	
			}
			if(enter.equals("x2")){//平方
				Calculater(result,result,"*");
			}
			if(enter.equals("abs")){//取绝对值
				int m = Integer.parseInt(result);
				m = Math.abs(m);
				result = m+"";
				jte.setText(result);
					
			}
		}

	}

 

由于只能进行整数运算,除法也只进行整数除法,所以小数点就废了,点击小数点会报错。。不过基本的运算功能算是实现了。。。



 

 
 

 

  • 大小: 23.8 KB
  • 大小: 23.2 KB
  • 大小: 25.3 KB
  • 大小: 23.5 KB
  • 大小: 18.7 KB
2
4
分享到:
评论
5 楼 wz94 2013-08-31  
freezingsky 写道
wz94 写道
luciferdevil 写道
定义数组arr = [按钮的text];
循环添加至面板并添加事件,总比一行一行手动写好,而且几十个jbtn……



学习了 不过ctrl c、ctrl v也不慢~~~

ctrl c、ctrl v是在你已经知道数量的情况下,如果扩展来想,传进来的是一个数组,长度未定,你还能ctrl c、ctrl v?吗

明白了,以后再遇到这种情况就用数组了
4 楼 freezingsky 2013-08-31  
wz94 写道
luciferdevil 写道
定义数组arr = [按钮的text];
循环添加至面板并添加事件,总比一行一行手动写好,而且几十个jbtn……



学习了 不过ctrl c、ctrl v也不慢~~~

ctrl c、ctrl v是在你已经知道数量的情况下,如果扩展来想,传进来的是一个数组,长度未定,你还能ctrl c、ctrl v?吗
3 楼 wz94 2013-08-30  
luciferdevil 写道
定义数组arr = [按钮的text];
循环添加至面板并添加事件,总比一行一行手动写好,而且几十个jbtn……



学习了 不过ctrl c、ctrl v也不慢~~~
2 楼 freezingsky 2013-08-29  
luciferdevil 写道
定义数组arr = [按钮的text];
循环添加至面板并添加事件,总比一行一行手动写好,而且几十个jbtn……

当年大学时刚开始学,也是这样反复敲。。。。。
1 楼 luciferdevil 2013-08-29  
定义数组arr = [按钮的text];
循环添加至面板并添加事件,总比一行一行手动写好,而且几十个jbtn……

相关推荐

    QT计算器界面和计算器功能实现

    QT计算器界面和计算器功能实现是基于QT框架进行的软件开发项目。QT是一个开源的C++图形用户界面应用程序开发框架,它提供了丰富的库和工具,帮助开发者构建跨平台的应用程序,包括桌面、移动和嵌入式设备。在这个...

    javascript实现计算器功能

    除法操作:在计算器功能实现中,作者特别提到了除法操作的一个特殊情况处理——当被除数为0时,结果应当显示为0。 b. 小数点精度控制:作者还提及结果为小数时,需要限制显示的小数位数最多为两位。例如,2/3的...

    单片机实现计算器功能

    单片机实现计算器功能是一项常见的嵌入式系统开发任务,主要应用于各种电子设备中的简单运算需求。在这个项目中,我们利用单片机的处理能力,配合C语言编程,设计了一个功能丰富的计算器,包括加法、减法、乘法、除...

    在51单片机上实现的完整功能的计算器源代码

    3. **计算器功能实现**:一个完整的计算器应包括加、减、乘、除及可能的括号运算、取余等基本功能。这些功能的实现涉及算法设计,需要处理数值溢出、除零错误等问题。此外,还需要考虑用户输入的处理,包括按键扫描...

    51单片机计算器简易功能实现

    本程序正是针对51单片机设计的一个简易计算器功能实现,旨在帮助初学者理解单片机编程和硬件控制。 在51单片机计算器的实现中,通常涉及到以下几个关键知识点: 1. **输入输出接口**:计算器需要接收用户输入的...

    基于Android计算器功能的实现毕业设计.pdf

    基于Android的计算器功能实现 随着科技的飞速进步,尤其是移动通信技术和网络技术的迅猛发展,智能手机已经成为我们日常生活中不可或缺的一部分。Android操作系统作为由Google公司发起的开源项目,吸引了众多硬件和...

    java实现计算器功能

    在Java编程语言中,实现一个计算器功能涉及到GUI(图形用户界面)的设计以及基本的算术运算处理。这里我们将深入探讨如何使用Java Swing库来构建一个简单的计算器应用,并实现加、减、乘、除等基本计算功能。 首先...

    大学毕业论文-—基于android计算器功能的实现.doc

    Android 计算器功能实现 摘要:本文基于 Android 平台开发的计算器,使用面向对象的程序开发语言 Eclipse 作为开发工具,设计并实现基于 Android 的计算器。论文首先介绍了 Android 开发平台和环境以及 Android ...

    计算器的嵌入式设计与实现

    在“计算器的嵌入式设计与实现”这个项目中,我们关注的是如何在嵌入式系统上构建一个功能完备的计算器应用。嵌入式系统通常指的是集成到特定设备中的小型计算平台,它们处理特定任务,如家用电器、汽车电子设备或...

    基于Android计算器功能的实现.doc

    总的来说,基于Android的计算器功能实现是一个综合性的项目,涵盖了Android应用开发的基本要素,包括UI设计、事件处理、数据计算以及用户交互。通过这个项目,开发者能够深入理解Android应用开发的核心技术,并提升...

    用mfc实现编程计算器的简单功能实现

    简单的计算器功能实现 整个系统具有的功能:响应各个数字键,实现加、减、乘、除、x^y、lnx、x!、开方、lgx、^2、^3、%、1/X、π、sinx、cosx、tanx、清空、求倒数、退格、相反数基本功能;

    Java详细实现完整计算器功能

    在本项目中,我们主要探讨如何使用Java编程语言来实现一个完整的计算器程序,类似于Windows操作系统中的`calc.exe`。这个程序不仅涵盖了基本的数学运算,还可能包括更复杂的计算功能。我们将深入研究以下关键知识点...

    用html实现计算器功能

    本软件是用html做一个计算机功能,希望能对你有帮助

    51多功能计算器 液晶显示

    3. **计算器功能实现**:计算器通常包含加减乘除、百分比、开方、指数等基本运算。这些功能的实现需要编写相应的算法,通过51单片机的I/O端口读取按键输入,然后处理计算,最后将结果显示在LCD上。理解并掌握这些...

    基于android计算器功能的实现-学位论文.doc

    总之,基于Android的计算器功能实现是一个综合性的项目,涵盖了移动应用开发的基本流程,包括需求分析、设计、编码、测试和部署。这个过程不仅锻炼了开发者的技术能力,也提升了对用户体验、系统架构和软件工程的...

    java程序实现计算器功能

    本文将深入解析如何使用Java实现一个基本的计算器功能,包括加法、减法、乘法和除法操作,同时也会探讨代码结构和关键概念。 ### Java程序实现计算器功能 #### 1. **项目概述** 创建一个Java程序来模拟计算器的...

    用51单片机实现计算器功能

    本文将详细探讨如何使用51单片机实现一个基础的计算器功能,包括整数的加减乘除运算,以及输入输出的设计。 首先,51单片机的核心是Intel 8051微处理器,它具有内置的RAM、ROM和I/O端口,这使得它能够处理简单的...

    利用C++实现计算器功能

    利用C++实现计算器功能, 包括加,减,乘,除,乘方,开方等。大一宿舍一起做的哦!

Global site tag (gtag.js) - Google Analytics