邢彬 /* XingBin.net */
XING Bin, a Coder, Geek, Railfan, and Outdoors Fan
face

使用Java语言编写简易计算器

发布 / 2006-03-16 16:39   于 / 邢彬作品   文 / XingBin   浏览 / 5819  

一、实验要求

使用JAVA语言编写一个简易的计算器。功能可以参考Windows自带的计算器。要求实现常用的功能键,能够正常使用。

二、设计思想

使用Swing设计计算器的界面。

使用多种布局方式叠加控制各个按钮的板块布局。

用户交互的数据平时使用字符串存放,需要计算时再将其转换double型。计算完毕后调用toString方法转换成字符串。这样设计的原因是:如果不使用字符串存储临时数据,那么输入数据只需将原来的数据乘以10再加上新输入的数据即可。但实际上由于精度有限,可能会出现无法显示精确数据。(比如:出现了若干个9或如干个0后跟一个1等等)使用字符串还可以较容易处理小数点的问题。

一共设置三个数据存放,分别是已经存入的原数据、现在输入的目的操作数和寄存器里存储的数据。

一个字符型的数据存放当前操作符。

两个布尔性变量控制是否可以输入数据等信息。

常用的数据功能可以直接进行计算,或者通过Math的类方法调用实现。

异常的处理:只需要捕获就可以了,不需要进行处理。此处有些问题,后面讨论。

三、界面的设计

整体布局是一个BorderLayout,其中第一行的按钮、下面的按钮都是BorderLayout,四部分按钮是GridLayout,然后将四部分的按钮加入到BorderLayout,再将这个BorderLayout以及结果输出框、版权信息加入到最大的BorderLayout。

为了增强功能,设置了菜单栏。提供了常用的功能:从系统剪贴板中粘贴数据、将计算结果粘贴到系统剪贴板。这部分操作较为复杂,是从《Think in Java, 3rd Edition》里面参考的。另外还设置了版权信息和简单的帮助,以便熟悉一下对话框的操作。

由于没有使用集成开发环境的程序,因此所有的代码都需要手写,而且调试起来很麻烦。经过多次的尝试,还是将界面设计出来了。

界面截图如下:

菜单:

四、程序分析

程序的设计参考了Sun Java网站里的大量实例,比如Layout的使用、Event的处理、Components的添加与应用等等。

其中:

public class NewCalc extends JFrame implements ActionListener

语句实现了ActionListener接口,因此可以调用addActionListener(this)方法对按钮进行点击监听,在下面的

public void actionPerformed(ActionEvent e)

方法里面对各个点击事件进行处理。

这里补充说明一下:最初为了实现按钮的彩色,使用了html代码,这样做的缺点是:按钮的大小不一致、需要再次重新设置按钮的监听值。为此,我使用的是调用JButton的方法改变其颜色,就不必再单独设置监听值了,按钮的标签就是默认的监听值。

菜单的响应较为独立,因此菜单的事件处理是在添加菜单项是进行的。

整个程序还有一些Bug:

没有对从系统粘贴来的数据进行数值化判断,因此各种字符都可以粘贴进来。比如:

此时只有通过C键清除,否则会抛出异常

对可操作的判断存在错误。比如操作数的连续操作等等。还有使用中的其它一些Bug,比如C键可能会导致后面的计算结果全部无效,而CE可能会解决该问题等等。这些是程序流程设计这问题,而不是Java编程实现的问题,因此本着为了研究Java语言设计的思想,没有对这些Bug进行处理。

程序界面上的指向www.xingbin.net的链接无法点击。不会解决。


同时还发现其他一些问题:如果不使用try块将可能会出现运行时异常的地方框起来,即使发生了异常,在后面的终端中会出现异常的显示,但是程序不会中断!这是一个让人费解的地方。因为理论上只要出现了异常有没有进行处理,那么程序会中断的。

虽然这次的综合实验设计的计算器比较简单,但是还是极大的考验了我的动手能力。事实证明动手能力还是可以的 。为了完成这个实验,我去了6次图书馆的阅览室查阅资料。因为图书馆里有关Swing的数太少,流通处几乎借不到,只要到馆藏阅览。同时还从Sun的网站上下载了一些Swing的实例进行参考。其中最费劲的地方有两处:界面的布局、事件的响应。由于课本讲得太简单或者根本就没讲,因此使用起来遇到了困难。图书馆的书上面讲得比较清楚。

五、参考资料

Java语言导学第三版(The Java Tutorial, Third Edition)
Mary Campione  Kathy Walrath  Alison Huml著  马朝晖 陈美红译
机械工业出版社

http://java.sun.com/docs/books/tutorial/uiswing/layout/example-1dot4/index.html
对界面布局的处理程序

http://java.sun.com/docs/books/tutorial/uiswing/events/example-1dot4/index.html
对事件响应的处理程序

http://java.sun.com/docs/books/tutorial/uiswing/components/example-1dot4/index.html
对组件的处理程序

JFC Swing标准教材(JFC swing tutorial : a guide to constructing GUIs)
Kathy Walrath等著  邓一凡等译
电子工业出版社

LOGIN
FOLLOW ME
COPYRIGHT
Creative Commons License
除特殊声明的页面外,本站作品采用 知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议 进行许可。