计算器键盘输入update(非常有用)

  • 格式:docx
  • 大小:94.67 KB
  • 文档页数:18

下载文档原格式

  / 18
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算器update——实现键盘输入

吴蔓电工一2017.5.12

之前做计算器时就想实现键盘功能,但是当时还不太会,刚接触,就先实现了各种函数,但是一直想实现键盘输入和鼠标输入均可的计算器,所以我最近半个月一直断断续续在做,由于最近考试多所以进度很慢,今天刚好考完,就可以全身心投入了,做好了这个只有加减乘除的键盘鼠标输入的计算器。

由于时间有限,这次不做exe了。

这次的键盘输入我只是完成了基本的加减乘除,sin,cos等函数运算暂时没有考虑,但是这是一个可以用鼠标控制输入也可以键盘输入的计算器,主要功能:

按下home键——清零,清空结果文本框,可重新输入新的数字

按下ESC键——退出计算器

按下backspace键——退格

按下等号/回车——得到计算结果,但是如果按的是等号,结果文本框会多显示一个”=”在最后,但是不影响计算结果正确性。如下图:(界面中右下角hello没有任何功能,只是为了美观)

鼠标输入的逻辑——首先设置当前运算符是=,输入一个数字,然后输入运算符,一旦检测到输入运算符就应该要进入一个处理运算符的函数,然后由于当前运算符是=,就执行等号

那部分的程序(仅仅是获得目前输入的第一个数字),然后应该清空文本框,让firstDigit=true,又可以输入数字,并改变当前运算符为刚输入的运算符;再输入等号,又进入处理运算符的那个程序,但是当前运算符应该是刚刚输入的运算符,所以执行+-*/对应的运算程序,得到结果。

键盘输入的逻辑——按下操作数一,显示在文本框中——>按下运算符(+-*/),获取第一个操作数到resultNum中,清空文本框——>显示出运算符,再清除;——>按下操作数2,显示出来,按下等号,就获取操作数二,再做相应的计算得到结果显示出来。

关键是加减乘除四则运算用到的四个布尔变量——plus,sub,mul,div,他们最开始设置为false,一旦检测到相应的运算符按下就变为true,等号按下后根据谁是true做什么运算。

做的过程中遇到一些问题,主要有以下几个:

1.乘号,加号检测不到。使用if(e.getKeyCode()==KeyEvent.VK_SHIFT &&

e.getKeyCode()==61){//加号

System.out.println("你按了+键");

resultNum=getNumberFromText();

resultText.setText("");

plus=true;}是检测不到的,具体解决方法在代码中写的很清楚。

加号应该使用if(e.getKeyChar()=='+'){//加号

System.out.println("你按了+键");

resultNum=getNumberFromText();

resultText.setText("");

plus=true;

}才可以检测到。

2.加减乘除计算不正确,后来分析原来是因为第二个数字输入以后和运算符一起出现在结

果文本框中,当按下等号或者回车时,get到的除了第二个操作数还有运算符,所以结果不对,所以想清除掉运算符的显示,用的代码:

if((e.getKeyCode()>=KeyEvent.VK_0&& e.getKeyCode()<=KeyEvent.VK_9)){ if(e.getKeyChar()=='*'){//乘号,乘号必须放在下面这个if前面,否则就无效,且又必须放在这个检测数字的if语句中才有效,因为按乘号是shift+8,8是数字键,所以加号就不必放在这里

System.out.println("你按了*键");

resultNum=getNumberFromText();

resultText.setText("");

3.加号和乘号的顺序问题,这两个不是随便放就有效的,顺序和原因我都写在注释中了,

主要是由于加号是shift和=,没涉及到数字,而乘号是shift和8,有数字所以必须放在检测数字的if中(见代码)。

程序:

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

public class KeyTest extends JFrame implements ActionListener,KeyListener{ private static final long serialVersionUID= 1L;

private final String[] KEYS={

"7","8","9","÷",

"4","5","6","*",

"1","2","3","-",

"0",".","=","+",

"BackSpace","AllClear","Exit","hello"};

private JTextField resultText=new JTextField("");

private JButton keys[]=new JButton[KEYS.length];

private boolean firstDigit=true;

private boolean plus,sub,mul,div;

private double resultNum=0.0;

//当前运算的运算符,初始化为=

private String operator="=";

//操作是否合法

private boolean operateValidFlag=true;

public KeyTest(){

super("键盘输入测试程序");