结对项目-增强型科学计算器
题目:增强型计算器
- 1、 题目简介:
项目采用结对编程方式编写,完成一个图形界面的计算器,可以在标准计算器和科学计算器之间切换,标准计算器的基本功能有:加、减、乘、除基本算术运算;科学计算器的基本功能有:三角函数、进制转换、对数、阶乘;在普通科学计算器基础上新增加:求解一元二次方程,求解勾股定理。
- 2、基本功能与要求:
1).标准计算器:加、减、乘、除、求平方根;
2).科学计算器:进制转换、求解三角函数、对数运算、阶乘;
3).一元二次方程:求一元二次方程的解;
4).勾股定理:求直角三角边长。
- 3、设计思路及分工:
对于此计算器程序,首先要设计其GUI界面,总体界面有一个文本框,18个按钮,总体界面用BorderLayout布局。
文本框放置在最NORTH,然后0到9以及+,-,*,/的按钮放置到一个面板Panel中,添加到整体布局的CENTER,界面设计完成。
布局设计好后再添加按钮事件。对于此程序要考虑到点击加、减、乘、除按钮时是否有点击数字按钮,如果是第一次点击数字按钮或者是点击数字按钮前点击了加、减、乘、除按钮则直接把数字按钮的数值设置到文本框中,否则则应把文本框中的内容加上你所点击按钮的数值设置到文本框中。
这是计算器中的一种:简单计算器,本项目用到了Java中的GUI界面和swing组件以及awt布局,所以简单易用,它能完成如下的几个小功能:
点击按钮中的数字键和运算符键就能进行简单的加、乘、乘、除求模四则运算 。
王浩负责各个计算功能的具体实现,这里不再列述请移至王浩博客看具体实现过程。
我负责GUI界面的具体实现,下面给出一些核心代码,完整代码在我的GitHub内。
我的github地址:https://github.com/mygithubq/counter
- 3.1功能图:
- 3.2流程图:
- 4、结对实践过程(个人部分核心代码)
1) 使用private JButton getJButton()方法添加按钮并给按钮命名,使用
setFont(new Font("楷体", Font.BOLD, 30)); setForeground(new Color
(250,0,0));方法设置按钮的字体和字体颜色。
2) 设置数字按钮1到9并添加监控,使其在发生鼠标事件时改变按钮颜色
1 addMouseListener(new MouseListener(){ 2 public void actionPerformed(MouseEvent e) { 3 jButton.setForeground(new Color(0,100,0));} 4 public void mouseClicked(MouseEvent e) { 5 jButton.setForeground(new Color(0,150,100));} 6 public void mouseEntered(MouseEvent e) { 7 jButton.setForeground(new Color(0,0,250));} 8 public void mouseExited(MouseEvent e) { 9 jButton.setForeground(new Color(250,0,0));} 10 public void mousePressed(MouseEvent e) { 11 jButton.setForeground(new Color(0,250,0));} 12 public void mouseReleased(MouseEvent e) { 13 jButton.setForeground(new Color(250,250,0));}});
3) 定义等于号按钮,jButton19.setText("=");通过使用switch……case语句来控制,Operator变量在定义+、-、*、/按钮时对其赋值
1 jButton19.addActionListener(new ActionListener() { 2 public void actionPerformed(ActionEvent e) { 3 double datatwo; 4 datatwo=Double.parseDouble(str); 5 switch(Operator){ 6 case'+':dataone+=datatwo;break; 7 case'-':dataone-=datatwo;break; 8 case'*':dataone*=datatwo;break; 9 case'/':dataone/=datatwo;break; 10 default:break;} 11 str=Double.toString(dataone); 12 jTextField.setText(str);}});
4)定义文本框jTextField,用来显示运算结果
1 jTextField.addKeyListener(new KeyAdapter() { 2 public void keyTyped(KeyEvent e) { 3 if(e.getKeyChar()>='0'&&e.getKeyChar()<='9'){ 4 str+=e.getKeyChar(); 5 jTextField.setText(str); 6 }else if(e.getKeyChar()==KeyEvent.VK_BACK_SPACE){ 7 str=str.substring(0, str.length()-1); 8 jTextField.setText(str); 9 }else if(e.getKeyChar()==KeyEvent.VK_ESCAPE){ 10 str=""; 11 jTextField.setText(str);}}});
5)设置退格按钮backspace,为jButton24添加监控ActionListener,通过引用全局变量str,str为string类型的变量
1 jButton24.addActionListener(new ActionListener() { 2 public void actionPerformed(ActionEvent e) { 3 if(str.length()!=0){ str=str.substring(0, str.length()-1); 4 jTextField.setText(str);}}});
6)添加菜单条jJMenuBar,在jJMenuBar中通过add来添加获取菜单的方法getJMenu,以此将菜单添加到菜单条中。菜单分别为编辑、查看、帮助。这三个菜单分别在其对应的getJMenu()方法中定义,编辑菜单下定义了菜单项复制和黏贴,查看菜单下定义了标准型、科学型、勾股定理、解一元二次方程四个菜单项,标准型通过
1 jMenuItem4.addActionListener(new ActionListener() { 2 public void actionPerformed(ActionEvent e) { 3 df=new DecimalFormat("#.###############");//保留15位小数 4 Counter.this.setBounds(400, 200, 600, 590); 5 Counter.this.setJMenuBar(getJJMenuBar()); 6 Counter.this.setContentPane(getJContentPane1());//将jContentPane1面板添加到jFrame框架上 7 Counter.this.setTitle("计 算 器"); 8 Counter.this.setVisible(true); 9 jTextField.addActionListener(this);}});
来实现窗体之间切换。setBounds()方法实现窗体的显示位置和窗体大小,setVisible()将其设置为true使其变为可见。使用相同的方法实现窗体之间相互切换,其中标准型和科学型在同一个窗体中,通过改变窗体大小和窗体添加控件来实现标准型和科学型两种计算器所需要的按钮。勾股定理、解一元二次方程通过改变setVisible()的值为true和false来实现窗体切换。帮助菜单下添加帮助主题和关于计算器选项,当单击帮助主题时就打开提示信息,单击关于计算器时就会打开一个对话框显示关于计算器的内容。
- 5、测试情况
程序使用的是fest-swing测试工具,进行GUI的测试,具体测试代码请到我的github中下载查看,测试及程序运行结果如下:
运行结果:
测试结果:使用fest-swing测试会出现动画效果强烈建议大家到我的github内下载代码运行看看
- 6 心得体会:
1、在按钮添加监控事件时出现问题,例如addActionListener(new Action
Listener() {public void actionPerformed(ActionEvent e) {…}})如果在方法体中书写if(e.getSource()==jMenuItem5)就会出现错误,必须是在public void actionPerformed(ActionEvent e){…}方法体中实现方法。
2、在科学型和标准型计算器之间的窗体转换出现问题,对响应的菜单项添加监控和响应的按钮添加到容器以后,可以实现从标准型转换到科学型,但是当单击标准型按钮以后却无法将窗体转换到标准型,只能显示标准型的窗体,但是在窗体。却没有按钮和文本框,通过改变相对应的容器进行改进。
3、在设置一元二次方程窗体时,单击计算按钮时却没有在文本框中输出对应的结果,但是对按钮和文本框都添加了addActionListener(this),而且在算法的编写中也没有出现错误,原因是在文本框中数据读出和写入时类型转换出现错误。
在编写代码的时候出现了错误,都是一些平时不怎么关注的,所以,平时还是要多实践。还有最重要的一点就是 不到万不得已才去请教别人要知道独立思考的能力对你很重要。要知道程序员的时间是很宝贵的。