简单功能强大的计算器代码.pptx_第1页
简单功能强大的计算器代码.pptx_第2页
简单功能强大的计算器代码.pptx_第3页
简单功能强大的计算器代码.pptx_第4页
简单功能强大的计算器代码.pptx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、分享一个完整的计算器代码,第一部分,自己也写的一个计算器,思考的过程如下: 1、界面基本上没什么问题,再写到运算操作时候碰到问题了,当捕获运算符操作,这时,因为这个时候只输入了一个数,不能进行加减乘除运算,(关键)所以先判断运算符,默认为“=”,再定义一个字符变量来保存传进来的运算符,这样就达到了,传入一个运算符的时候,进行的是上一次传进来的运算符的操作,并把结果保存在一个中间变量中。 2、当发现太多的if,else语句嵌套,不防把这些代码定义为一种方法 3、在响应事件的方法中,如果有,采用调用方法,来简化响应时间里面的代码,并使思路更清晰,在计算器的程序中,加入了两个boolean类型的变量

2、来达到控制的目的 4、怎么样设计代码,才能使扩展性更强呢?目前知道的只有:解耦,耦合度越低,可以扩张性就更强。 别人写的下面这个计算器觉得蛮好的: javaview plaincopy importjava.awt.BorderLayout; importjava.awt.Color; importjava.awt.GridLayout; importjava.awt.event.ActionEvent; importjava.awt.event.ActionListener; importjavax.swing.JButton; importjavax.swing.JFrame; impor

3、tjavax.swing.JPanel; importjavax.swing.JTextField; /* *一个计算器,与Windows附件自带计算器的标准版功能、界面相仿。但还不支持键盘操作。 */ publicclassCalculatorextendsJFrameimplementsActionListener /*计算器上的键的显示名字*/ privatefinalStringKEYS=7,8,9,/,sqrt,4,5,6, *,%,1,2,3,-,1/x,0,+/-,.,+,=; /*计算器上的功能键的显示名字*/ privatefinalStringCOMMAND=Backspa

4、ce,CE,C; /*计算器左边的M的显示名字*/ privatefinalStringM=,MC,MR,MS,M+; /*计算器上键的按钮*/ privateJButtonkeys=newJButtonKEYS.length; /*计算器上的功能键的按钮*/ privateJButtoncommands=newJButtonCOMMAND.length; /*计算器左边的M的按钮*/ privateJButtonm=newJButtonM.length; /*计算结果文本框*/ privateJTextFieldresultText=newJTextField(0); /标志用户按的是否是整

5、个表达式的第一个数字,或者是运算符后的第一个数字 privatebooleanfirstDigit=true; /计算的中间结果。,第二部分,privatedoubleresultNum=0.0; /当前运算的运算符 privateStringoperator=; /操作是否合法 privatebooleanoperateValidFlag=true; /* *构造函数 */ publicCalculator() super(); /初始化计算器 init(); /设置计算器的背景颜色 this.setBackground(Color.LIGHT_GRAY); this.setTitle(计算

6、器); /在屏幕(500,300)坐标处显示计算器 this.setLocation(500,300); /不许修改计算器的大小 this.setResizable(false); /使计算器中各组件大小合适 this.pack(); /* *初始化计算器 */ privatevoidinit() /文本框中的内容采用右对齐方式 resultText.setHorizontalAlignment(JTextField.RIGHT); /不允许修改结果文本框 resultText.setEditable(false); /设置文本框背景颜色为白色 resultText.setBackground

7、(Color.white); /初始化计算器上键的按钮,将键放在一个画板内 JPanelcalckeysPanel=newJPanel(); /用网格布局器,4行,5列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素 calckeysPanel.setLayout(newGridLayout(4,5,3,3); for(inti=0;iKEYS.length;i+) keysi=newJButton(KEYSi); calckeysPanel.add(keysi); keysi.setForeground(Color.blue); /运算符键用红色标示,其他键用蓝色表示 key

8、s3.(久游在线); keys8.setForeground(Color.red); (久游在线总代); keys18.setForeground(Color.red); keys19.setForeground(Color.red); /初始化功能键,都用红色标示。将功能键放在一个画板内 JPanelcommandsPanel=newJPanel(); /用网,第三部分,格布局器,1行,3列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素 commandsPanel.setLayout(newGridLayout(1,3,3,3); for(inti=0;iCOMMAND.l

9、ength;i+) commandsi=newJButton(COMMANDi); commandsPanel.add(commandsi); commandsi.setForeground(Color.red); /初始化M键,用红色标示,将M键放在一个画板内 JPanelcalmsPanel=newJPanel(); /用网格布局管理器,5行,1列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素 calmsPanel.setLayout(newGridLayout(5,1,3,3); for(inti=0;iM.length;i+) mi=newJButton(Mi); c

10、almsPanel.add(mi); mi.setForeground(Color.red); /下面进行计算器的整体布局,将calckeys和command画板放在计算器的中部, /将文本框放在北部,将calms画板放在计算器的西部。 /新建一个大的画板,将上面建立的command和calckeys画板放在该画板内 JPanelpanel1=newJPanel(); /画板采用边界布局管理器,画板里组件之间的水平和垂直方向上间隔都为3象素 panel1.setLayout(newBorderLayout(3,3); panel1.add(North,commandsPanel); panel

11、1.add(West,calckeysPanel); /建立一个画板放文本框 JPaneltop=newJPanel(); top.setLayout(newBorderLayout(); top.add(Center,resultText); /整体布局 getContentPane().setLayout(newBorderLayout(3,5); getContentPane().add(North,top); getContentPane().add(Center,panel1); getContentPane().add(West,calmsPanel); /为各按钮添加事件侦听器

12、/都使用同一个事件侦听器,即本对象。本类的声明中有implementsActionListener for(inti=0;iKEYS.length;i+) keysi.addActionListener(this); for(inti=0;iCOMMAND.length;i+) commandsi.addActionListener(this); for(inti=0;iM.length;i+) mi.addActionListener(this); /* *处理事件 */,第四部分,publicvoidactionPerformed(ActionEvente) /获取事件源的标签 Strin

13、glabel=e.getActionCommand(); if(label.equals(COMMAND0) /用户按了Backspace键 handleBackspace(); elseif(label.equals(COMMAND1) /用户按了CE键 resultText.setText(0); elseif(label.equals(COMMAND2) /用户按了C键 handleC(); elseif(0123456789.indexOf(label)=0) /用户按了数字键或者小数点键 handleNumber(label); /handlezero(zero); else /用户

14、按了运算符键 handleOperator(label); /* *处理Backspace键被按下的事件 */ privatevoidhandleBackspace() Stringtext=resultText.getText(); inti=text.length(); if(i0) /退格,将文本最后一个字符去掉 text=text.substring(0,i-1); if(text.length()=0) /如果文本没有了内容,则初始化计算器的各种值 resultText.setText(0); firstDigit=true; operator=; else /显示新的文本 resu

15、ltText.setText(text); /* *处理数字键被按下的事件 * *paramkey */,第五部分,privatevoidhandleNumber(Stringkey) if(firstDigit) /输入的第一个数字 resultText.setText(key); elseif(key.equals(.) ,第六部分,elseif(operator.equals(+) /加法运算 resultNum+=getNumberFromText(); elseif(operator.equals(-) /减法运算 resultNum-=getNumberFromText(); el

16、seif(operator.equals(*) /乘法运算 resultNum*=getNumberFromText(); elseif(operator.equals(sqrt) /平方根运算 resultNum=Math.sqrt(resultNum); elseif(operator.equals(%) /百分号运算,除以100 resultNum=resultNum/100; elseif(operator.equals(+/-) /正数负数运算 resultNum=resultNum*(-1); elseif(operator.equals(=) /赋值运算 resultNum=ge

17、tNumberFromText(); if(operateValidFlag) /双精度浮点数的运算 longt1; doublet2; t1=(long)resultNum; t2=resultNum-t1; if(t2=0) resultText.setText(String.valueOf(t1); else resultText.setText(String.valueOf(resultNum); /运算符等于用户按的按钮 operator=key; firstDigit=true; operateValidFlag=true; /* *从结果文本框中获取数字 * *return */ privatedo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论