1.概述
之前作者写过一篇文章,也是关于计算器的,用的是C++与Qt,链接在这里
这次用java的swing写的(这差距好像有点大,好吧是qt太强了).
先上图:
![617b809a8d847df1975b4b4dc0cf66d2.png](https://img-blog.csdnimg.cn/img_convert/617b809a8d847df1975b4b4dc0cf66d2.png)
2.UI
总体布局使用流布局.
(1)文本框
文本框就一个JPanel里面加一个JTextField.
boxField
JTextField设置尺寸需要使用setPreferredSize()而不是setSize().
(2)按键
按键4*4网格布局,逐个添加button即可.
buttonsField
3.鼠标事件
鼠标事件针对button,仔细想一想,单击一个button,然后文本框里面就会有相应的反应,据此添加事件监听.
num0
requestFocus()这一行把焦点还给JFrame,因为鼠标点击button后,button会获取焦点,会影响后面的键盘监听.
4.键盘事件
键盘事件与鼠标事件类似,针对每个键判断即可. 在这里的是把KeyListener注册到JFrame上面,直接在里面重写以下三个KeyListener的方法:
public
基本上就是通过
if
来判断各个键,唯一要注意一下的是+与* 因为作者使用的键盘没有小键盘(尴尬....),+与*需要shift+=或8,尝试过直接
if
无效. 因此需要在KeyPressed这里判断是否按下了shift,然后到了KeyReleased()的时候,特判一下8与=:
else
5.计算表达式
计算表达式部分这里讲了就不详细说了,代码在后面.
简单来说就是先使用
GetResult
这个静态方法设置表达式,然后通过
GetResult
判断是否合法,合法的话通过
GetResult
获取String结果.
6.测试
![6c678d22ab54695b675034765c6e6cb8.gif](https://img-blog.csdnimg.cn/img_convert/6c678d22ab54695b675034765c6e6cb8.gif)
![a92e4cb879f3b24c888d6f679dc9ee43.gif](https://img-blog.csdnimg.cn/img_convert/a92e4cb879f3b24c888d6f679dc9ee43.gif)