当前位置:   article > 正文

Java语言GUI实现计算器_设计一个基于gui设计的计算器,可以进行加、减、乘、除、求倒数、平方根的运算

设计一个基于gui设计的计算器,可以进行加、减、乘、除、求倒数、平方根的运算

Java语言GUI实现计算器以及源代码

一、 设计分析
1.1任务及其目的
设计一个计算器应用程序,完成复杂的科学运算。设计的计算器应用程序可以完成加法、减法、乘法、除法和科学函数运算。且有小数点、正负号、求倒数、退格和清零等功能。用鼠标点击相应的数字键和运算符号键,然后点击=按钮。窗口上方的文本框将会显示计算出来的结果,如果未显示说明输入的表达式有误。要将文本框清零,科单击清零按钮。
1.2设计思路
实现主要分为两部分:

  1. 编写能实现简单四则运算的类(BaseCalcucator.class)
    将传入的中缀表达式转化为逆波兰表达式,在进行计算。
  2. 编写进行科学计算的类(SceneCalculator.class)
    将传入的式子进行相应的科学计算,并用计算出来的结果进行替代掉进行科学计算的式子。
    二,程序结构
    1、程序流程如下图
    在这里插入图片描述
    图2.1程序流程图
    2、程序界面
    在这里插入图片描述
    图2.2程序界面图
    控件
    1.文本框TextArea:text用于显示当前计算的式子,recordArea用于显示过去计算的式子,mermoryArea用于显示计算器“寄存器”中的值。
    2.功能Button:record和mermor用于在历史记录和“寄存器”之间进行切换。
    3.数字Button:0-9.小数点
    4.运算符Button:+ - * / ( ) =
    5.计算器基本Button:←用于退格,c用于清空mathNow、recordArea、mermoryArea
    6.科学运算符Button::(15个)
    sin,cos,tan,ln,log,e,π,1/x, x2,x3, , x!,√, ,|x|,
    7.切换Button:Deg代表角度制,Rad代表弧度制。通过点击Deg实现角度制与弧度制之间的切换
    成员变量
    1.private String mathPast=” ”,用于存储上次运算的式子
    2.private String mathNow =” ”,用于存储现在运算的式子
    3.private String showNow=” ”,用于存储显示在文本框的式子
    4.private String m;用于存储使用计算器寄存器的数
    5.private String restult=””;用于计算出来的结果
    6.pivate String temp=””,用于暂时存储的数字
    7.private int TrigCalculMethod=0;(默认设置为0,进行角度制运算)
    TrigCalculMethod=0,进行角度制运算,TrigCalculMethod=1,进行弧度制运算
    8.private int equal_flag=0;进行等号按钮的标记(及刚刚是否进行了一次运算)
    equal_flag=0,及刚刚没有进行运算,equal_flag=1,代表刚刚进行了一次运算

三、 各模块的功能及程序说明
3.1 Calcuator主类模块
3.1.1 初始化特殊函数按钮
由于JButton 按钮上无法显示出x2,x3, , ,所以图片粘贴的办法,将相应的函数图片粘贴到按钮的表面。,

//创建x的平方,x的三次方,x的y次方,x开y次方按钮
    ImageIcon squareimg = new ImageIcon("src\\Calcuator\\x的平方.png");// 创建图片对象
    ImageIcon cubeimg = new ImageIcon("src\\Calcuator\\x的三次方.png");// 创建图片对象
    ImageIcon powerimg = new ImageIcon("src\\Calcuator\\x的y次方.png");// 创建图片对象
    ImageIcon readicationimg = new ImageIcon("src\\Calcuator\\x开y次方.png");// 创建图片对象

    Image squareimage = squareimg.getImage();
    Image cubeimage = cubeimg.getImage();
    Image powerimage = powerimg.getImage();
    Image readicationimage = readicationimg.getImage();

    //为把它缩小点,先要取出这个Icon的image ,然后缩放到合适的大小
    Image squaresmallImage = squareimage.getScaledInstance(25,25,Image.SCALE_FAST);
    Image cubesmallImage = cubeimage.getScaledInstance(25,25,Image.SCALE_FAST);
    Image powersmallImage = powerimage.getScaledInstance(25,25,Image.SCALE_FAST);
    Image readictionsmallImage = readicationimage.getScaledInstance(30,30,Image.SCALE_FAST);

    //再由修改后的Image来生成合适的Icon;
    //***Image对象创建ImageIcon对象,可查阅ImageIcon的构造方法***
    ImageIcon smallIcon  = new ImageIcon(squaresmallImage);
    ImageIcon cmallIcon = new ImageIcon(cubesmallImage);
    ImageIcon pmallIcon = new ImageIcon(powersmallImage);
    ImageIcon rmallIcon = new ImageIcon(readictionsmallImage);

    JButton squarebuttion=new JButton(smallIcon);
    JButton cubebuttion=new JButton(cmallIcon);
    JButton powerbuttion=new JButton(pmallIcon);
    JButton readictionbuttion=new JButton(rmallIcon);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  图3.1.1 特殊函数按钮初始化代码图
  • 1

3.1.2 初始化计算器的界面

使用构造法,进行计算器开始界面的设计。

public Calcuator (){
   
    super("计算器");
    this.setBounds(400, 250, 900, 680);
 //设置窗体图片
//    this.setIconImage(walkpaperimage);

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     //设置窗体的布局形式
GridBagLayout gr=new GridBagLayout();
GridBagConstraints gc=new GridBagConstraints();
    //设置窗体布局
         this.setLayout(gr);
  
    //创建模板
     JPanel jp1 = createPanel1();
     JPanel jp2 = createPanel2();
     
     //对整个窗体进行网格包布局 jp1,jp4
     gc.weightx=90;gc.weighty=68;gc.fill=GridBagConstraints.BOTH;
     gc.gridwidth=7;gc.gridheight=10;

     gc.gridx=0;gc.gridy=0;
     gr.setConstraints(jp1,gc);
     this.add(jp1);
     gc.gridwidth=3;gc.gridheight=10;
     gc.gridx=7;gc.gridy=0;
     gr.setConstraints(jp2,gc);
     this.add(jp2);
     this.setVisible(true);
         }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

图3.1.2构造计算器开始界面

设计思路:
1、 将计算器开始窗口划分为两个左右大面板。左边的面板放置用于显示的文本域和按钮,右边的面板用于放置历史记录按钮和内存按钮及其对应的文本域.。然后采用网格包布局管理器,进行分配比例和布局。
2、 (方法createPanel1())在左边的大面板中再创建两个面板。将文本域放置在一个面板,按钮也放置在单独的一个面板。然后采用边界布局,将文本域所在的面板放置大面板的North,按钮所在的面板放置在Center。在按钮所在的面板中采用网格布局放置每一个按钮,然后实例化监听类(ButtonAction)的对象(ba),并在每一个按钮上添加监听对象(ba)。
3、 (方法 createPanel2())在右边的大面板中同样创建两个面板。一个放置历史记录按钮和内存按钮,一个放置对应的文本域。也是采用边界布局,将按钮所在的面板置于North,将文本域的面板置于Center。放置文本域的面板再采用卡片布局,放置不同按钮对应的文本域。

3.1.3 监听类(ButtonAction)的设置
用Plantuml绘制监听类的原理如下:
在这里插入图片描述代码与原理图有所出入,不过大致原理是一样的。
3.1.3 监听类原理图
设计思路
1、 将计算器所有按钮(除去Degr、历史记录、内存)的监听编写在一个类中。
2、 把计算器的按钮分为四个类型:常量型、运算符、函数型、功能。并设计对应的四个模块。点击按钮则运行对应模块。

3.2 ScienCalcuator类
把要进行计算的表达式转入到ScienCalcuator类,进行科学运算,并计算出来的结果替代相应的字符。最后得到没有科学运算符的字符串,再将其传入BaseCalcuator中。
3.2.1 对计算式进行预处理
去掉 math 中的空格,替换 π,替换自然指数 e
3.2.1 计算式的预处理
3.2.2 pow运算(”^”)
获取^左右两边的参数进行Math.pow计算,如果参数是表达式,需要调用fScienCalcuator方法,然后用结算结果替换科学运算式部分。
大致原理如下图:

String fPower(String con_str) {
   
        while (con_str.contains("^")) {
   

            //1.中间寻找的点
            int midIndex = con_str.lastIndexOf
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/275647
推荐阅读
相关标签
  

闽ICP备14008679号