专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

java实现简单计算器

1、概述

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

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

先上图:

53_1.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、测试

53_2.png

53_3.png

7、源码

github

码云

文章永久链接:https://tech.souyunku.com/28870

未经允许不得转载:搜云库技术团队 » java实现简单计算器

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们