Java 计算器小程序

Jack
• 阅读 1089

该程序是一个图形界面的简单 Java 计算器,具有良好的界面,使用人员能快捷简单的进行加、减、 乘、除、操作。其程序要求为设计一个图形界面(GUI)的计算器应用程序,完成简单的加法、减法、乘 法、除法运算,且参与计算的数字和所得结果可以有小数点、正负号,同时还要具备清零功能。

一、需求分析 根据项目简介中的项目要求,我们将其具体需求做如下分析: 1. 要使用 java 的 GUI 设计出计算器界面。 2. 通过界面按钮,可以进行加减乘除运算,并能将结果显示在界面中。 3. 计算可以有小数点,和正负整数的计算。 4. 要有清零功能。

二、设计思路: 分析完项目需求后,接下来让我们看一下项目的设计思路。 1.本应用程序继承自框架类(Frame),此程序使用 Frame 布局管理器 BorderLayout,将包含单行文本 框和清零按钮的 Panel2 加入到“North”区域,包含各种按钮的面板 Panel1 加入到”Center”区域。包 含各种按钮的面板 Panel1 采用 4 行 4 列的网格布局,然后将数字按钮和运算符按钮以及控制按钮添加到 面板中。 2.项目中要注册按钮事件监听器 ActionListener;事件监听器中的事件处理方法 public void actionPerformed(ActionEvent evt)完成主要的按钮事件的处理。 3.事件处理分以下几种情况:数字按钮事件(”0”,”1”,”2”„”8”,”9”)、运算符按钮事件(”+”,” -“,”*”,”/”)小数点按钮事件(”.”)、等号按钮事件(”=”)、清楚按钮事件(“CE”)。 4.计算器完成的是一个数学表达式,里面涉及到的就是加、减、乘、除的基本操作,仅需定义一个变 量来保存运算操作的前一个数字,与当前在计算器上的显示数字进行计算即可。

代码如下:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
class Calculator implements ActionListener {
    JButton b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15,
            b16;
    JFrame f;
    GridLayout c = new GridLayout(4, 4);
    JTextField tf = new JTextField();
public void init() {
    f = new JFrame("CardLayout testing");
    Container ct = f.getContentPane();
    tf.setHorizontalAlignment(JTextField.RIGHT);
    ct.add(tf, "North");
    JPanel p2 = new JPanel();
    ct.add(p2, "Center");
    GridLayout c = new GridLayout(4, 4);
    p2.setLayout(c);
    JButton b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16;
    b1 = new JButton("1");
    b2 = new JButton("2");
    b3 = new JButton("3");
    b4 = new JButton("4");
    b5 = new JButton("5");
    b6 = new JButton("6");
    b7 = new JButton("7");
    b8 = new JButton("8");
    b9 = new JButton("9");
    b10 = new JButton("0");
    b11 = new JButton(".");
    b12 = new JButton("=");
    b13 = new JButton("+");
    b14 = new JButton("-");
    b15 = new JButton("x");
    b16 = new JButton("/");
    p2.add(b1);
    b1.addActionListener(this);
    p2.add(b2);
    b2.addActionListener(this);
    p2.add(b3);
    b3.addActionListener(this);
    p2.add(b13);
    b13.addActionListener(this);
    p2.add(b4);
    b4.addActionListener(this);
    p2.add(b5);
    b5.addActionListener(this);
    p2.add(b6);
    b6.addActionListener(this);
    p2.add(b14);
    b14.addActionListener(this);
    p2.add(b7);
    b7.addActionListener(this);
    p2.add(b8);
    b8.addActionListener(this);
    p2.add(b9);
    b9.addActionListener(this);
    p2.add(b15);
    b15.addActionListener(this);
    p2.add(b10);
    b10.addActionListener(this);
    p2.add(b11);
    b11.addActionListener(this);
    p2.add(b12);
    b12.addActionListener(this);
    p2.add(b16);
    b16.addActionListener(this);

    f.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });
    f.setSize(200, 180);
    f.setVisible(true);
}

double sum = 0;
Vector v = new Vector(1, 1);
Vector v2 = new Vector(1, 1);

public Calculator() {
    v2.addElement(new String("init"));
    v.addElement(new String("init"));
}

public void actionPerformed(ActionEvent e) {
    String str = tf.getText();
    // 加号的实现
    if (e.getActionCommand() == "+") 
    {
        if (("+").equals((String) v2.lastElement())
                || ("-").equals((String) v2.lastElement())
                || ("x").equals((String) v2.lastElement())
                || ("/").equals((String) v2.lastElement())
                || ("=").equals((String) v2.lastElement())) {
            tf.setText(String.valueOf(sum));
        } else if (("init").equals((String) v2.lastElement())) {
            tf.setText(String.valueOf(sum));
            v2.addElement(new String("="));
        } else {
            double d = Double.parseDouble(str);
            if (("+").equals((String) v.lastElement())) {
                sum = sum + d;
                tf.setText(String.valueOf(sum));
            } else if (("-").equals((String) v.lastElement())) {
                sum = sum - d;
                tf.setText(String.valueOf(sum));
            } else if (("x").equals((String) v.lastElement())) {
                sum = sum * d;
                tf.setText(String.valueOf(sum));
            } else if (("/").equals((String) v.lastElement())) {
                sum = sum / d;
                tf.setText(String.valueOf(sum));
            } else if (("=").equals((String) v.lastElement())) {
                sum = sum + d;
                tf.setText(String.valueOf(sum));
            } else {
                sum = sum + d;
                tf.setText(String.valueOf(sum));
            }
        }
        v.addElement(new String("+"));
        v2.addElement(new String("+"));
    }

    // 减号的实现
    if (e.getActionCommand() == "-") 
    {
        if (("+").equals((String) v2.lastElement())
                || ("-").equals((String) v2.lastElement())
                || ("x").equals((String) v2.lastElement())
                || ("/").equals((String) v2.lastElement())
                || ("=").equals((String) v2.lastElement())) {
            tf.setText(String.valueOf(sum));
        } else if (("init").equals((String) v2.lastElement())) {
            tf.setText(String.valueOf(sum));
            v2.addElement(new String("="));
        } else {
            double d = Double.parseDouble(str);
            if (("+").equals((String) v.lastElement())) {
                sum = sum + d;
                tf.setText(String.valueOf(sum));
            } else if (("-").equals((String) v.lastElement())) {
                sum = sum - d;
                tf.setText(String.valueOf(sum));
            } else if (("x").equals((String) v.lastElement())) {
                sum = sum * d;
                tf.setText(String.valueOf(sum));
            } else if (("/").equals((String) v.lastElement())) {
                sum = sum / d;
                tf.setText(String.valueOf(sum));
            } else if (("=").equals((String) v.lastElement())) {
                sum = sum + d;
                tf.setText(String.valueOf(sum));
            } else {
                sum = sum + d;
                tf.setText(String.valueOf(sum));
            }
        }
        v.addElement(new String("-"));
        v2.addElement(new String("-"));
    }

    // 乘号的实现
    if (e.getActionCommand() == "x") 
    {
        if (("+").equals((String) v2.lastElement())
                || ("-").equals((String) v2.lastElement())
                || ("x").equals((String) v2.lastElement())
                || ("/").equals((String) v2.lastElement())
                || ("=").equals((String) v2.lastElement())) {
            tf.setText(String.valueOf(sum));
        } else if (("init").equals((String) v2.lastElement())) {
            tf.setText(String.valueOf(sum));
            v2.addElement(new String("="));
        } else {
            double d = Double.parseDouble(str);
            if (("+").equals((String) v.lastElement())) {
                sum = sum + d;
                tf.setText(String.valueOf(sum));
            } else if (("-").equals((String) v.lastElement())) {
                sum = sum - d;
                tf.setText(String.valueOf(sum));
            } else if (("x").equals((String) v.lastElement())) {
                sum = sum * d;
                tf.setText(String.valueOf(sum));
            } else if (("/").equals((String) v.lastElement())) {
                sum = sum / d;
                tf.setText(String.valueOf(sum));
            } else if (("=").equals((String) v.lastElement())) {
                sum = sum + d;
                tf.setText(String.valueOf(sum));
            } else {
                sum = sum + d;
                tf.setText(String.valueOf(sum));
            }
        }
        v.addElement(new String("x"));
        v2.addElement(new String("x"));
    }

    // 除号的实现
    if (e.getActionCommand() == "/") 
    {
        if (("+").equals((String) v2.lastElement())
                || ("-").equals((String) v2.lastElement())
                || ("x").equals((String) v2.lastElement())
                || ("/").equals((String) v2.lastElement())
                || ("=").equals((String) v2.lastElement())) {
            tf.setText(String.valueOf(sum));
        } else if (("init").equals((String) v2.lastElement())) {
            tf.setText(String.valueOf(sum));
            v2.addElement(new String("="));
        } else {
            double d = Double.parseDouble(str);
            if (("+").equals((String) v.lastElement())) {
                sum = sum + d;
                tf.setText(String.valueOf(sum));
            } else if (("-").equals((String) v.lastElement())) {
                sum = sum - d;
                tf.setText(String.valueOf(sum));
            } else if (("x").equals((String) v.lastElement())) {
                sum = sum * d;
                tf.setText(String.valueOf(sum));
            } else if (("/").equals((String) v.lastElement())) {
                sum = sum / d;
                tf.setText(String.valueOf(sum));
            } else if (("=").equals((String) v.lastElement())) {
                sum = sum + d;
                tf.setText(String.valueOf(sum));
            } else {
                sum = sum + d;
                tf.setText(String.valueOf(sum));
            }
        }
        v.addElement(new String("/"));
        v2.addElement(new String("/"));
    }

    // 等号实现
    if (e.getActionCommand() == "=") 
    {
        if (("+").equals((String) v2.lastElement())
                || ("-").equals((String) v2.lastElement())
                || ("x").equals((String) v2.lastElement())
                || ("/").equals((String) v2.lastElement())
                || ("=").equals((String) v2.lastElement())) {
            tf.setText(String.valueOf(sum));
        } else if (("init").equals((String) v2.lastElement())) {
            tf.setText(String.valueOf(sum));
        } else {
            double d = Double.parseDouble(str);
            if (("+").equals((String) v.lastElement())) {
                sum = sum + d;
                tf.setText(String.valueOf(sum));
            } else if (("-").equals((String) v.lastElement())) {
                sum = sum - d;
                tf.setText(String.valueOf(sum));
            } else if (("x").equals((String) v.lastElement())) {
                sum = sum * d;
                tf.setText(String.valueOf(sum));
            } else if (("/").equals((String) v.lastElement())) {
                sum = sum / d;
                tf.setText(String.valueOf(sum));
            } else if (("=").equals((String) v.lastElement())) {
                sum = sum + d;
                tf.setText(String.valueOf(sum));
                // tf.setText(String.valueOf(sum));
            } else {
                sum = sum + d;
                tf.setText(String.valueOf(sum));
            }
        }
        v.addElement(new String("="));
        v2.addElement(new String("="));
    }

    if (e.getActionCommand() == "1" || e.getActionCommand() == "2"
            || e.getActionCommand() == "3" || e.getActionCommand() == "4"
            || e.getActionCommand() == "5" || e.getActionCommand() == "6"
            || e.getActionCommand() == "7" || e.getActionCommand() == "8"
            || e.getActionCommand() == "9" || e.getActionCommand() == "0"
            || e.getActionCommand() == ".") // 1,2,3,4,5,6,7,8,9,0,.的实现;
    {
        if (("+").equals((String) v2.lastElement())
                || ("-").equals((String) v2.lastElement())
                || ("x").equals((String) v2.lastElement())
                || ("/").equals((String) v2.lastElement())
                || ("init").equals((String) v2.lastElement())) {
            tf.setText("");
            tf.setText(e.getActionCommand());
        } else if (("=").equals((String) v2.lastElement())) {
            sum = 0;
            tf.setText("");
            tf.setText(e.getActionCommand());
        } else {
            tf.setText(tf.getText() + e.getActionCommand());// 调用其父类中的getText()方法
        }
        v2.addElement(new String(e.getActionCommand()));
    }
}

public static void main(String args[]) {
    new Calculator().init();
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JCalculator extends JFrame implements ActionListener {
    /**
     * 
     */
    private static final long serialVersionUID = -6675736133730301893L;
private class WindowCloser extends WindowAdapter {
   public void windowClosing(WindowEvent we) {
       System.exit(0);
   }
}

int i;
// Strings for Digit & Operator buttons.
private final String[] str = { "7", "8", "9", "/", "4", "5", "6", "*", "1",
       "2", "3", "-", ".", "0", "=", "+" };
// Build buttons.
JButton[] buttons = new JButton[str.length];
// For cancel or reset.
JButton reset = new JButton("CE");
// Build the text field to show the result.
JTextField display = new JTextField("0");

/**
 * Constructor without parameters.
 */
public JCalculator() {
   super("计算器");
   // Add a panel.
   JPanel panel1 = new JPanel(new GridLayout(4, 4));
   // panel1.setLayout(new GridLayout(4,4));
   for (i = 0; i < str.length; i++) {
       buttons[i] = new JButton(str[i]);
       panel1.add(buttons[i]);
   }
   JPanel panel2 = new JPanel(new BorderLayout());
   // panel2.setLayout(new BorderLayout());
   panel2.add("Center", display);
   panel2.add("East", reset);
   // JPanel panel3 = new Panel();
   getContentPane().setLayout(new BorderLayout());
   getContentPane().add("North", panel2);
   getContentPane().add("Center", panel1);
   // Add action listener for each digit & operator button.
   for (i = 0; i < str.length; i++)
       buttons[i].addActionListener(this);
   // Add listener for "reset" button.
   reset.addActionListener(this);
   // Add listener for "display" button.
   display.addActionListener(this);
   // The "close" button "X".
   addWindowListener(new WindowCloser());
   // Initialize the window size.
   setSize(800, 800);
   // Show the window.
   // show(); Using show() while JDK version is below 1.5.
   setVisible(true);
   // Fit the certain size.
   pack();
}  

public void actionPerformed(ActionEvent e) {
   Object target = e.getSource();
   String label = e.getActionCommand();
   if (target == reset)
       handleReset();
   else if ("0123456789.".indexOf(label) > 0)
       handleNumber(label);
   else
       handleOperator(label);
}
// Is the first digit pressed?
boolean isFirstDigit = true;
/**
 * Number handling.
 * @param key the key of the button.
 */
public void handleNumber(String key) {
   if (isFirstDigit)
       display.setText(key);
   else if ((key.equals(".")) && (display.getText().indexOf(".") < 0))
       display.setText(display.getText() + ".");
   else if (!key.equals("."))
       display.setText(display.getText() + key);
   isFirstDigit = false;
}

/**
 * Reset the calculator.
 */
public void handleReset() {
   display.setText("0");
   isFirstDigit = true;
   operator = "=";
}

double number = 0.0;
String operator = "=";

/**
 * Handling the operation.
 * @param key pressed operator's key.
 */
public void handleOperator(String key) {
   if (operator.equals("+"))
       number += Double.valueOf(display.getText());
   else if (operator.equals("-"))
       number -= Double.valueOf(display.getText());
   else if (operator.equals("*"))
       number *= Double.valueOf(display.getText());
   else if (operator.equals("/"))
       number /= Double.valueOf(display.getText());
   else if (operator.equals("="))
       number = Double.valueOf(display.getText());
   display.setText(String.valueOf(number));
   operator = key;
   isFirstDigit = true;
}

public static void main(String[] args) {
   new JCalculator();
}
}

程序运行结果为: Java 计算器小程序

更多知识欢迎关注微信公众号“51学代码”

网址:www.51xcode.com[链接](http://www.51xcode.com)

作者博客:https://hello1024.world (你好1024的世界)链接 Java 计算器小程序

点赞
收藏
评论区
推荐文章
浅梦一笑 浅梦一笑
2个月前
初学 Python 需要安装哪些软件?超级实用,小白必看!
编程这个东西是真的奇妙。对于懂得的人来说,会觉得这个工具是多么的好用、有趣,而对于小白来说,就如同大山一样。其实这个都可以理解,大家都是这样过来的。那么接下来就说一下python相关的东西吧,并说一下我对编程的理解。本人也是小白一名,如有不对的地方,还请各位大神指出01名词解释:如果在编程方面接触的比较少,那么对于软件这一块,有几个名词一定要了解,比如开发环
技术小男生 技术小男生
2个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi /etc/profile2:按字母键i进入编辑模式,在最底部添加内容: JAVAHOME/opt/jdk1.8.0152 CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jar PATH$JAVAHOME/bin:$PATH3:生效配置
光头强的博客 光头强的博客
2个月前
Java面向对象试题
1、 请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。 创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现 接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿 吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
刚刚好 刚刚好
2个月前
css问题
1、 在IOS中图片不显示(给图片加了圆角或者img没有父级) <div<img src""/</div div {width: 20px; height: 20px; borderradius: 20px; overflow: h
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录 问题 用navicat导入数据时,报错: 原因这是因为当前的MySQL不支持datetime为0的情况。 解决修改sql\mode: sql\mode:SQL Mode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。 全局s
小森森 小森森
2个月前
校园表白墙微信小程序V1.0 SayLove -基于微信云开发-一键快速搭建,开箱即用
后续会继续更新,敬请期待2.0全新版本 欢迎添加左边的微信一起探讨!项目地址:](https://www.aliyun.com/activity/daily/bestoffer?userCodesskuuw5n) \2. Bug修复更新日历 2. 情侣脸功能大家不要使用了,现在阿里云的接口已经要收费了(土豪请随意), \ \ 和 注意
晴空闲云 晴空闲云
2个月前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。 盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
Easter79 Easter79
1年前
Twitter的分布式自增ID算法snowflake (Java版)
概述 == 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。 有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。 而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
helloworld_28799839 helloworld_28799839
2个月前
常用知识整理
# Javascript ## 判断对象是否为空 ```js Object.keys(myObject).length === 0 ``` ## 经常使用的三元运算 > 我们经常遇到处理表格列状态字段如 `status` 的时候可以用到 ``` vue
helloworld_34035044 helloworld_34035044
4个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。 uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid() 或 uuid(sep)参数说明:sep 布尔值,生成的uuid中是否包含分隔符'',缺省为
Jack
Jack
Lv1
在校大学生
微信公众号:“51学代码” 个人博客:hello1024.world(你好1024的世界)
8
文章
0
粉丝
0
获赞