一、实验要求
使用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等著 邓一凡等译
电子工业出版社