计算器界面的实现在之前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); } } }
由于只能进行整数运算,除法也只进行整数除法,所以小数点就废了,点击小数点会报错。。不过基本的运算功能算是实现了。。。
相关推荐
QT计算器界面和计算器功能实现是基于QT框架进行的软件开发项目。QT是一个开源的C++图形用户界面应用程序开发框架,它提供了丰富的库和工具,帮助开发者构建跨平台的应用程序,包括桌面、移动和嵌入式设备。在这个...
除法操作:在计算器功能实现中,作者特别提到了除法操作的一个特殊情况处理——当被除数为0时,结果应当显示为0。 b. 小数点精度控制:作者还提及结果为小数时,需要限制显示的小数位数最多为两位。例如,2/3的...
单片机实现计算器功能是一项常见的嵌入式系统开发任务,主要应用于各种电子设备中的简单运算需求。在这个项目中,我们利用单片机的处理能力,配合C语言编程,设计了一个功能丰富的计算器,包括加法、减法、乘法、除...
3. **计算器功能实现**:一个完整的计算器应包括加、减、乘、除及可能的括号运算、取余等基本功能。这些功能的实现涉及算法设计,需要处理数值溢出、除零错误等问题。此外,还需要考虑用户输入的处理,包括按键扫描...
本程序正是针对51单片机设计的一个简易计算器功能实现,旨在帮助初学者理解单片机编程和硬件控制。 在51单片机计算器的实现中,通常涉及到以下几个关键知识点: 1. **输入输出接口**:计算器需要接收用户输入的...
基于Android的计算器功能实现 随着科技的飞速进步,尤其是移动通信技术和网络技术的迅猛发展,智能手机已经成为我们日常生活中不可或缺的一部分。Android操作系统作为由Google公司发起的开源项目,吸引了众多硬件和...
在Java编程语言中,实现一个计算器功能涉及到GUI(图形用户界面)的设计以及基本的算术运算处理。这里我们将深入探讨如何使用Java Swing库来构建一个简单的计算器应用,并实现加、减、乘、除等基本计算功能。 首先...
Android 计算器功能实现 摘要:本文基于 Android 平台开发的计算器,使用面向对象的程序开发语言 Eclipse 作为开发工具,设计并实现基于 Android 的计算器。论文首先介绍了 Android 开发平台和环境以及 Android ...
在“计算器的嵌入式设计与实现”这个项目中,我们关注的是如何在嵌入式系统上构建一个功能完备的计算器应用。嵌入式系统通常指的是集成到特定设备中的小型计算平台,它们处理特定任务,如家用电器、汽车电子设备或...
总的来说,基于Android的计算器功能实现是一个综合性的项目,涵盖了Android应用开发的基本要素,包括UI设计、事件处理、数据计算以及用户交互。通过这个项目,开发者能够深入理解Android应用开发的核心技术,并提升...
简单的计算器功能实现 整个系统具有的功能:响应各个数字键,实现加、减、乘、除、x^y、lnx、x!、开方、lgx、^2、^3、%、1/X、π、sinx、cosx、tanx、清空、求倒数、退格、相反数基本功能;
在本项目中,我们主要探讨如何使用Java编程语言来实现一个完整的计算器程序,类似于Windows操作系统中的`calc.exe`。这个程序不仅涵盖了基本的数学运算,还可能包括更复杂的计算功能。我们将深入研究以下关键知识点...
本软件是用html做一个计算机功能,希望能对你有帮助
3. **计算器功能实现**:计算器通常包含加减乘除、百分比、开方、指数等基本运算。这些功能的实现需要编写相应的算法,通过51单片机的I/O端口读取按键输入,然后处理计算,最后将结果显示在LCD上。理解并掌握这些...
总之,基于Android的计算器功能实现是一个综合性的项目,涵盖了移动应用开发的基本流程,包括需求分析、设计、编码、测试和部署。这个过程不仅锻炼了开发者的技术能力,也提升了对用户体验、系统架构和软件工程的...
本文将深入解析如何使用Java实现一个基本的计算器功能,包括加法、减法、乘法和除法操作,同时也会探讨代码结构和关键概念。 ### Java程序实现计算器功能 #### 1. **项目概述** 创建一个Java程序来模拟计算器的...
本文将详细探讨如何使用51单片机实现一个基础的计算器功能,包括整数的加减乘除运算,以及输入输出的设计。 首先,51单片机的核心是Intel 8051微处理器,它具有内置的RAM、ROM和I/O端口,这使得它能够处理简单的...
利用C++实现计算器功能, 包括加,减,乘,除,乘方,开方等。大一宿舍一起做的哦!