简单计算器的实现java_java实现简单计算器

1.概述

之前作者写过一篇文章,也是关于计算器的,用的是C++与Qt,链接在这里

这次用java的swing写的(这差距好像有点大,好吧是qt太强了).

先上图:

93c85a1e12e2493b1e2be78aa8ab2213.png

2.UI

总体布局使用流布局.

(1)文本框

文本框就一个JPanel里面加一个JTextField.

boxField.setLayout(new FlowLayout());

box.setPreferredSize(new Dimension(300, 25));

boxField.add(box);

JTextField设置尺寸需要使用setPreferredSize()而不是setSize().

(2)按键

按键4*4网格布局,逐个添加button即可.

buttonsField.setLayout(new GridLayout(4, 4, 20, 20));

buttonsField.setPreferredSize(new Dimension(300, 300));

buttonsField.add(xxx);

//add....

3.鼠标事件

鼠标事件针对button,仔细想一想,单击一个button,然后文本框里面就会有相应的反应,据此添加事件监听.

num0.addActionListener(v -> {

box.setText(box.getText() + "0");

mainFrame.requestFocus();

});

requestFocus()这一行把焦点还给JFrame,因为鼠标点击button后,button会获取焦点,会影响后面的键盘监听.

4.键盘事件

键盘事件与鼠标事件类似,针对每个键判断即可.

在这里的是把KeyListener注册到JFrame上面,直接在里面重写以下三个KeyListener的方法:

public void keyPressed(KeyEvent e);

public void keyReleased(KeyEvent e);

public void keyTyped(KeyEvent e);

基本上就是通过

if (e.getKeyCode() == KeyEvent.VK_xxxx)

来判断各个键,唯一要注意一下的是+与*

因为作者使用的键盘没有小键盘(尴尬....),+与*需要shift+=或8,尝试过直接

if (e.getKeyCode() == KeyEvent.VK_PLUS)

if (e.getKeyCode() == KeyEvent.VK_ADD)

if (e.getKeyCode() == KeyEvent.VK_MUTIPLY)

无效.

因此需要在KeyPressed这里判断是否按下了shift,然后到了KeyReleased()的时候,特判一下8与=:

else if (e.getKeyCode() == KeyEvent.VK_8)

box.setText(box.getText() + (shift ? "*" : "8"));

else if(e.getKeyCode() == KeyEvent.VK_EQUALS)

{

if(shift)

box.setText(box.getText() + "+");

else

setResult();

}

5.计算表达式

计算表达式部分这里讲了就不详细说了,代码在后面.

简单来说就是先使用

GetResult.setExpression();

这个静态方法设置表达式,然后通过

GetResult.valid()

判断是否合法,合法的话通过

GetResult.result()

获取String结果.

6.测试

fba3c950b69761fcb32e164c5fe1c714.gif

e1fe944fa74c7faaf66141db7041abf0.gif

7.源码

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值