毕业设计课程 基于 Java Swing 实现的简单科学计算器

项目概述

> 本次给大家分享的是一个基于 Java Swing 实现的简单科学计算器。

> 这款科学计算器的界面设计简洁美观,代码简洁明了,注释清晰且齐全   

> 非常适用于 Java 初学者熟悉循环、递归、数学运算、 以及 Java Swing 的布局和事件机制。   



运行演示

- 使用了 5×5的网格布局 来排列,程序运行界面如下图所示:

  > 包括基本 运算符、科学运算符、数字、归零、等号 等按钮。

- 上方的文本框一共有两行:

> 第一行用于显示计算过程   

> 第二行用于显示正在输入的数字或计算结果

- 支持较复杂的运算,例如下图中演示的运算:



运行环境

说明:java 的老版本已经停止维护,推荐使用 `java 17` 或更新的版本。



功能列表

未实现的功能:连续输入时的计算顺序处理,括号的处理,其它数学函数,感兴趣的小伙伴可以自行实现。



代码实现

定义全局变量:

 用于显示计算表达式和结果的文本区域:private final    JTextArea textArea

存储计算结果的变量:private double result = 0;

存储当前操作符的变量:private String operator = "";

标志是否完成一次计算,用于判断是否可以开始新的输入:private boolean calculating = true;


在构造函数中初始化一个 Swing 窗口:

publicCalculator(){        setTitle("智能牌科学计算器");

设置窗口标题setIconImage(newImageIcon("./src/calculator/logo.png").getImage());

设置窗口图标setSize(350,350);

设置窗口大小setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

设置窗口关闭操作

初始化文本区域,用于显示计算表达式和结果textArea =newJTextArea("\n0",2,20);        textArea.setEditable(false);

设置文本区域不可编辑textArea.setFont(newFont("黑体", Font.PLAIN,24));

设置字体add(textArea, BorderLayout.NORTH);

将文本区域添加到窗口

初始化按钮面板JPanelbuttonPanel=getjPanel();        add(buttonPanel, BorderLayout.CENTER);

将按钮面板添加到窗口的中心}

初始化按钮面板,设置为 5×5 的网格布局,并初始化按钮标签数组,为按钮设置监听事件:

privateJPanelgetjPanel(){JPanelbuttonPanel=newJPanel();

创建一个新的面板buttonPanel.setLayout(newGridLayout(5,5));

设置面板布局为 5 行 5 列的网格布局

定义计算器的按钮标签数组String[] buttons = {"sin","cos","tan","log","AC","7","8","9","+","^","4","5","6","-","%","1","2","3","×","√","0",".","=","÷","π"};

遍历按钮标签数组,创建并初始化按钮for(String label : buttons) {JButtonbutton=newJButton(label);            button.setFont(newFont("黑体", Font.PLAIN,20));

设置按钮字体button.addActionListener(e -> click(label));

设置按钮点击事件监听器buttonPanel.add(button);

将按钮添加到面板}returnbuttonPanel;

返回初始化完成的面板}

下面是点击事件的实现方法,可以根据自己的需求来补充完整:

privatevoidclick(String label){

如果点击的是数字或小数点按钮if('0'<= label.charAt(0) && label.charAt(0) <='9'|| label.equals(".") || label.equals("π")) {            String[] lines = textArea.getText().split("\n");

TODO 针对数字点击事件的处理}elseif(label.equals("AC")) {

如果点击的是清除按钮,清空文本区域textArea.setText("\n0");            result =0;        }else{

TODO 针对运算符点击事件的处理}    }

下面是针对不同的运算符点击事件的处理方法,同样可以根据自己的需求来调整:

privatevoidcalculate(String label){        String[] lines = textArea.getText().split("\n");doublex;

如果当前输入包含"("或"^",则将结果赋给x,否则将当前输入转换为double类型if(lines[1].contains("(") || lines[1].contains("^")) {            x = result;        }else{            x = Double.parseDouble(lines[1]);        }

根据操作符执行相应的计算操作Stringtext=lines[0];if(label.equals("sin")) {            getResultByOperator(Math.sin(x));            text +="\nsin("+ lines[1] +")";        }elseif(label.equals("log")) {

TODO 同类型的实现方法不再赘述,参考上面的sin即可}else{// 如果没有之前的操作符result = x;            text += lines[1] + label +"\n";if(label.equals("=")) {

这里主要是去除小数点后多余的0if(result %1==0) {                    text += (int) result;                }else{                    text += result;                }            }        }        textArea.setText(text);// 更新文本区域显示计算结果}

下面是基本运算符的实现方法,同样可以根据自己的需求来调整:

privatevoidgetResultByOperator(Double x){switch(operator) {case"+":                result += x;break;case"^":                result = Math.pow(result, x);break;

TODO 同类型的实现方法不再赘述,参考上述代码即可default:                result = x;break;        }

单次运算完毕,重置计算状态operator ="";    }



感谢支持

- 以上就是本次推荐的内容,感谢看到这里的你们,如果觉得我的文章对你有帮助,记得点个关注哦,这对我很重要,你的鼓励是我最大的动力。


源码获取

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容