简易计算器-课后程序(JAVA基础案例教程-黑马程序员编著-第十一章-课后作业)

这篇具有很好参考价值的文章主要介绍了简易计算器-课后程序(JAVA基础案例教程-黑马程序员编著-第十一章-课后作业)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【案例11-2】 简易计算器

【案例介绍】

1.案例描述

本案例要求利用Java Swing 图形组件开发一个可以进行简单的四则运算的图形化计算器。

2.运行结果

cal方法编写了计算逻辑的实现,Java,java,开发语言,ui

运行结果

 

【案例分析】

要制作一个计算器,首先要知道它由哪些部分组成,如下图所示:

cal方法编写了计算逻辑的实现,Java,java,开发语言,ui

一个简单的图形化界面计算器,需要由界面组件、组件的时间监听器和具体的事件处理逻辑组成。

实现一个简易图形化界面计算器可分以下几个步骤:

1.UI组件创建和初始化:包括窗体的创建,显示计算结果文本框、清除按钮、数字按钮、运算符等按钮的初始化。

2.在窗体中添加UI组件:包括放置数字键及运算符面板、放置清除框面板。

3.布局结束之后,就是计算器的难点:编写事件处理程序。

4.按键的响应实现。

5.计算逻辑的实现。

6.注册监听器

【案例实现】

Calculator.java

  1. package chapter1102;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import javax.swing.*;
  5. import java.util.Vector;
  6. import java.math.BigDecimal;
  7. public class Calculator {
  8.           // 操作数1,为了程序的安全,初值一定设置,这里我们设置为0
  9.           String str1 = "0";
  10.          // 操作数2
  11.      String str2 = "0";
  12.      // 运算符
  13.     String signal = "+";  
  14.      // 运算结果
  15.     String result = "";
  16.      // 以下k1k5为状态开关
  17.      // 开关1用于选择输入方向,将要写入str1str2
  18.      // 1 时写入 str1,为 2 时写入 str2
  19.     int k1 = 1;
  20.     // 开关 2 用于记录符号键的次数
  21.      // 如果 k2>1 说明进行的是 2+3-9+8 这样的多符号运算
  22.     int k2 = 1;
  23.      // 开关3用于标识 str1 是否可以被清 0
  24.      // 等于 1 时可以,不等于1时不能被清0
  25.     int k3 = 1;
  26.      // 开关4用于标识 str2 是否可以被清 0
  27.      // 等于 1 时可以,不等于1时不能被清0
  28.     int k4 = 1;
  29.      // 开关5用于控制小数点可否被录入
  30.      // 等于1时可以,不为1时,输入的小数点被丢掉
  31.     int k5 = 1;
  32.      // store的作用类似于寄存器,用于记录是否连续按下符号键
  33.     JButton store;
  34.      //vt 存储之前输入的运算符。
  35.     @SuppressWarnings("rawtypes")
  36.     Vector vt = new Vector(20, 10);
  37.      // 创建一个 JFrame 对象并初始化。JFrame 可以理解为程序的主窗体。  
  38.      JFrame frame = new JFrame("Calculator");
  39.  //创建一个JTextField对象并初始化。JTextField用于显示操作和计算结果的文本框。
  40.      // 参数 20 表明可以显示 20 列的文本内容
  41.     JTextField result_TextField = new JTextField(result, 20);
  42.      // 清除按钮
  43.     JButton clear_Button = new JButton("Clear");
  44.      // 数字键09
  45.     JButton button0 = new JButton("0");
  46.     JButton button1 = new JButton("1");
  47.     JButton button2 = new JButton("2");
  48.     JButton button3 = new JButton("3");
  49.     JButton button4 = new JButton("4");
  50.     JButton button5 = new JButton("5");
  51.     JButton button6 = new JButton("6");
  52.     JButton button7 = new JButton("7");
  53.     JButton button8 = new JButton("8");
  54.     JButton button9 = new JButton("9");
  55.      // 计算命令按钮,加减乘除以及小数点等
  56.     JButton button_Dian = new JButton(".");
  57.     JButton button_jia = new JButton("+");
  58.     JButton button_jian = new JButton("-");
  59.     JButton button_cheng = new JButton("*");
  60.     JButton button_chu = new JButton("/");
  61.     JButton button_dy = new JButton("=");
  62.     public Calculator() {
  63.         button0.setMnemonic(KeyEvent.VK_0);
  64.     result_TextField.setHorizontalAlignment(JTextField.RIGHT);
  65.         // 创建一个 Jpanel 对象并初始化
  66.          JPanel pan = new JPanel();
  67.          // 设置该容器的布局为四行四列,边距为5像素
  68.         pan.setLayout(new GridLayout(4, 4, 5, 5));
  69.          // 将用于计算的按钮添加到容器内
  70.         pan.add(button7);
  71.         pan.add(button8);
  72.         pan.add(button9);
  73.         pan.add(button_chu);
  74.         pan.add(button4);
  75.         pan.add(button5);
  76.         pan.add(button6);
  77.         pan.add(button_cheng);
  78.         pan.add(button1);
  79.         pan.add(button2);
  80.         pan.add(button3);
  81.         pan.add(button_jian);
  82.         pan.add(button0);
  83.         pan.add(button_Dian);
  84.         pan.add(button_dy);
  85.         pan.add(button_jia);
  86.          // 设置 pan 对象的边距
  87.         pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
  88.          // 按照同样的方式设置第二个JPanel
  89.         JPanel pan2 = new JPanel();
  90.         pan2.setLayout(new BorderLayout());
  91.         pan2.add(result_TextField, BorderLayout.WEST);
  92.         pan2.add(clear_Button, BorderLayout.EAST);
  93.           // 设置主窗口出现在屏幕上的位置
  94.         frame.setLocation(300, 200);
  95.          // 设置窗体可以调大小
  96.         frame.setResizable(true);
  97.          //窗体中可以放置 JPanel,这里我们将面板pan和面板pan2让如窗体
  98.         frame.getContentPane().setLayout(new BorderLayout());
  99.         frame.getContentPane().add(pan2, BorderLayout.NORTH);
  100.         frame.getContentPane().add(pan, BorderLayout.CENTER);
  101.         frame.pack();
  102.         frame.setVisible(true);
  103.          //Listener类中编写的是数字键的响应逻辑。
  104.         class Listener implements ActionListener {
  105.            @SuppressWarnings("unchecked")
  106.            public void actionPerformed(ActionEvent e) {
  107.                String ss = ((JButton) e.getSource()).getText();
  108.                store = (JButton) e.getSource();
  109.                vt.add(store);
  110.                if (k1 == 1) {
  111.                    if (k3 == 1) {
  112.                        str1 = "";
  113.                        k5 = 1;
  114.                    }
  115.                    str1 = str1 + ss;
  116.                    k3 = k3 + 1;
  117.                    result_TextField.setText(str1);
  118.                } else if (k1 == 2) {
  119.                    if (k4 == 1) {
  120.                        str2 = "";
  121.                        k5 = 1;
  122.                }
  123.                    str2 = str2 + ss;
  124.                    k4 = k4 + 1;
  125.                    result_TextField.setText(str2);
  126.                }                              
  127.            }
  128.         }
  129.           //Listener_signal类中编写了运算符号键的响应逻辑
  130.         class Listener_signal implements ActionListener {
  131.            @SuppressWarnings("unchecked")
  132.            public void actionPerformed(ActionEvent e) {
  133.                String ss2 = ((JButton) e.getSource()).getText();
  134.                store = (JButton) e.getSource();
  135.                vt.add(store);
  136.                if (k2 == 1) {
  137.                    k1 = 2;
  138.                    k5 = 1;
  139.                    signal = ss2;
  140.                    k2 = k2 + 1;
  141.                } else {
  142.                    int a = vt.size();
  143.                    JButton c = (JButton) vt.get(a - 2);
  144.                    if (!(c.getText().equals("+"))
  145.                            && !(c.getText().equals("-"))
  146.                            && !(c.getText().equals("*"))
  147.                            && !(c.getText().equals("/")))
  148.                    {
  149.                        cal();
  150.                        str1 = result;
  151.                        k1 = 2;
  152.                        k5 = 1;
  153.                        k4 = 1;
  154.                        signal = ss2;
  155.                    }
  156.                    k2 = k2 + 1;
  157.                }
  158.            }
  159.         }
  160.      //Listener_clear类中编写了清除键的响应逻辑
  161.     class Listener_clear implements ActionListener {
  162.            @SuppressWarnings("unchecked")
  163.            public void actionPerformed(ActionEvent e) {
  164.                store = (JButton) e.getSource();
  165.                vt.add(store);
  166.                k5 = 1;
  167.                k2 = 1;
  168.                k1 = 1;
  169.                k3 = 1;
  170.                k4 = 1;
  171.                str1 = "0";
  172.                str2 = "0";
  173.                signal = "";
  174.                result = "";
  175.                result_TextField.setText(result);
  176.                vt.clear();
  177.            }
  178.         }
  179.      //Listener_dy类中编写的是等于号键的响应逻辑
  180.     class Listener_dy implements ActionListener {
  181.            @SuppressWarnings("unchecked")
  182.            public void actionPerformed(ActionEvent e) {
  183.                store = (JButton) e.getSource();
  184.                vt.add(store);
  185.                cal();
  186.                k1 = 1;
  187.                k2 = 1;
  188.                k3 = 1;
  189.                k4 = 1;
  190.                str1 = result;
  191.            }
  192.         }
  193. //Listener_xiaos类中编写的是小数点键的相应逻辑
  194. class Listener_xiaos implements ActionListener {
  195.            @SuppressWarnings("unchecked")
  196.            public void actionPerformed(ActionEvent e) {
  197.                store = (JButton) e.getSource();
  198.                vt.add(store);
  199.                if (k5 == 1) {
  200.                    String ss2 = ((JButton) e.getSource()).getText();
  201.                    if (k1 == 1) {
  202.                        if (k3 == 1) {
  203.                            str1 = "";
  204.                            k5 = 1;
  205.                        }
  206.                        str1 = str1 + ss2;
  207.                        k3 = k3 + 1;
  208.                        result_TextField.setText(str1);
  209.                    } else if (k1 == 2) {
  210.                        if (k4 == 1) {
  211.                            str2 = "";
  212.                            k5 = 1;
  213.                        }
  214.                        str2 = str2 + ss2;
  215.                        k4 = k4 + 1;
  216.                        result_TextField.setText(str2);
  217.                    }
  218.                }
  219.                k5 = k5 + 1;
  220.            }
  221.         }
  222.           // 监听等于键
  223.         Listener_dy jt_dy = new Listener_dy();
  224.          // 监听数字键
  225.         Listener jt = new Listener();
  226.          // 监听符号键
  227.         Listener_signal jt_signal = new Listener_signal();
  228.          // 监听清除键
  229.         Listener_clear jt_c = new Listener_clear();
  230.          // 监听小数点键
  231.         Listener_xiaos jt_xs = new Listener_xiaos();
  232.         button7.addActionListener(jt);
  233.         button8.addActionListener(jt);
  234.         button9.addActionListener(jt);
  235.         button_chu.addActionListener(jt_signal);
  236.         button4.addActionListener(jt);
  237.         button5.addActionListener(jt);
  238.         button6.addActionListener(jt);
  239.         button_cheng.addActionListener(jt_signal);
  240.         button1.addActionListener(jt);
  241.         button2.addActionListener(jt);
  242.         button3.addActionListener(jt);
  243.         button_jian.addActionListener(jt_signal);
  244.         button0.addActionListener(jt);
  245.         button_Dian.addActionListener(jt_xs);
  246.         button_dy.addActionListener(jt_dy);
  247.         button_jia.addActionListener(jt_signal);
  248.         clear_Button.addActionListener(jt_c);
  249.           // 窗体关闭事件的响应程序
  250.         frame.addWindowListener(new WindowAdapter() {
  251.            public void windowClosing(WindowEvent e) {
  252.                System.exit(0);
  253.            }
  254.         });
  255.     }
  256.      // calc()方法中编写了计算逻辑的实现。
  257.     public void cal() {
  258.         double a2;
  259.         double b2;
  260.         String c = signal;
  261.         double result2 = 0;
  262.         if (c.equals("")) {
  263.            result_TextField.setText("Please input operator");
  264.         } else {
  265.            if (str1.equals("."))
  266.                str1 = "0.0";
  267.            if (str2.equals("."))
  268.                str2 = "0.0";
  269.            a2 = Double.valueOf(str1).doubleValue();
  270.            b2 = Double.valueOf(str2).doubleValue();
  271.            if (c.equals("+")) {
  272.                result2 = a2 + b2;
  273.            }
  274.            if (c.equals("-")) {
  275.                result2 = a2 - b2;
  276.            }
  277.            if (c.equals("*")) {
  278.                BigDecimal m1 = new BigDecimal(Double.toString(a2));
  279.                    BigDecimal m2 = new
  280.                                     BigDecimal(Double.toString(b2));
  281.                    result2 = m1.multiply(m2).doubleValue();
  282.            }
  283.            if (c.equals("/")) {
  284.                if (b2 == 0) {
  285.                    result2 = 0;
  286.                } else {
  287.                    result2 = a2 / b2;
  288.                }
  289.            }
  290.            result = ((new Double(result2)).toString());
  291.            result_TextField.setText(result);
  292.         }
  293.     }
  294.     @SuppressWarnings("unused")
  295.     public static void main(String[] args) {
  296.     try {  
  297.  //通过 UIManager 来设置窗体的 UI 风格
  298.  UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
  299.         } catch (Exception e) {
  300.            e.printStackTrace();
  301.         }
  302.         Calculator cal = new Calculator();
  303.     }
  304. }

上述代码中,第7-32行代码,定义了一些成员变量,方便响应的逻辑实现。第34-35行代码,创建了一个Vector对象,存储之前输入的运算符。第37行代码,创建了一个 JFrame 对象并初始化。JFrame 可以理解为程序的主窗体。第40行代码,创建了一个JTextField对象并初始化。JTextField用于显示操作和计算结果的文本框。参数 20 表明可以显示 20 列的文本内容。第42行代码,创建了一个清除按钮对象。第44-53行,创建数字键0-9按钮对象。第55-60行,创建计算命令按钮,加减乘除以及小数点等按钮对象。第65-101行代码,是对计算器进行布局。Listener类中编写的是数字键的响应逻辑。Listener_xiaos类中编写的是小数点键的相应逻辑。Listener_signal类中编写了运算符号键的响应逻辑。Listener_dy类中编写的是等于号键的响应逻辑。Listener_clear类中编写了清除键的响应逻辑。calc()方法中编写了计算逻辑的实现。第222-247行代码,创建监听对象,斌对各个按键进行监听。第249-253行代码,为窗体关闭事件的响应程序。第297行代码,通过 UIManager 来设置窗体的 UI 风格。文章来源地址https://www.toymoban.com/news/detail-778858.html

到了这里,关于简易计算器-课后程序(JAVA基础案例教程-黑马程序员编著-第十一章-课后作业)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序-简易计算器

    微信小程序-简易计算器,满足日常所用的的加减乘除计算 一、前期准备工作 软件环境:微信开发者工具 官方下载地址:微信开发者工具下载地址与更新日志 | 微信开放文档 1、基本需求。 简易计算器 满足日常所用的的加减乘除计算 带历史记录,查看过往计算 2、案例目录结构

    2024年02月04日
    浏览(55)
  • 微信小程序————简易计算器

        点击页面数字按键可以计算简单的加减乘除数据运算。 页面显示   大概逻辑是当点第一次击数字键的时候要有个变量来存储这个点击的数,然后再来个记录点击运算符的变量,等要算的数全输入后,最后“=”后把前面输入的数字和运算符以字符串的形式显示在上屏幕上

    2024年02月17日
    浏览(186)
  • Java课程设计——简易计算器

    1.系统简介 1.1设计背景     随着人们物质生活水平的日益提高,人们对高质量的计算提出了更高的要求。当今世界,是云计算的生活和物联网发展和使用阶段,计算性能的高低和计算的效率直接影响到了人们的生活。对此,使用Java语言开发出一个为人们生活带来便利的计算

    2024年02月08日
    浏览(43)
  • HTML程序大全(1):简易计算器

    HTML代码,主要创建了几个按钮。 CSS代码,主要设置了背景、计算机板和按钮等等的颜色。 javascript代码,主要设置了对应按钮按下的显示、计算、清零的工作。 总结: 这是一个简单的计算器,使用HTML、CSS和JavaScript实现。HTML代码创建了一个计算器的界面,CSS代码设置了计算

    2024年02月04日
    浏览(46)
  • Python自制简易版计算器小程序

    今天来给你们分享一个自制的桌面小程序【简易版计算器】 文章内有效果展示,你们可以自行看看哦 不想看文章,想直接领取源码的话,可以直接点击文章末尾的名片哈 Python 3.6 Pycharm 界面设置 导入模块 所有 源码 点击 此处 领取 即可 实例化一个窗体对象 标题 大小以及出

    2024年02月09日
    浏览(49)
  • 微信小程序如何制作简易计算器

    1、首先在浏览器中输入\\\"GitHub - dunizb/wxapp-sCalc: :speech_balloon:微信小程序版简易计算器demo,适合入门练手\\\"网址,输入完成后会进入到以下这个界面: 2、点击旁边绿色的按键 3、点击之后会有以下几个选项: 点击最后一行的Download ZIP,下载一个文件 然后解压一下这个文件,解压完

    2024年04月23日
    浏览(64)
  • Java课设-百行代码实现简易计算器

    Java程序设计 工程实践 ——简易计算器的设计 院、 系 计算机与软件学院 专业 信息安全 姓 名 指导教师 2022年 6 月 11 日 目录: 一、 设计简介 2 1、 设计背景 2 2、 开发工具及环境 2 (1)开发工具及介绍 2 (2)开发环境 2 二、 相关工作 2 1、设计基础 2 2、功能需求 2 3、系统

    2024年02月04日
    浏览(75)
  • JAVA课程设计——GUI实现简易计算器

    一.设计任务及要求 任务:设计并实现一个计算器小程序 要求: 使用图形用户界面 能在键盘或鼠标上读入数据,并完成加,减,乘,除计算。 在屏幕上显示一个主菜单。 提示用户输入相应的数字键,分别执行加,减,乘,除计算功能和结束程序的功能。 二.需求分析: ​ 计算

    2024年02月12日
    浏览(43)
  • 微信小程序案例——计算器

    1、创建项目 按照惯例,做一些初始化工作 2、设置导航栏 在 app.json 文件设置 window 配置项 pages/index/index.wxml 文件 1、编写页面整体结构 2、编写结果区域结构 两行内容:第一行是当前的计算式,第二行是当前计算结果 3、编写按钮区域第一行按钮的结构 第一行包含四个按钮:

    2024年04月11日
    浏览(41)
  • 【微信小程序】计算器案例

    🏆今日学习目标:第二十一期——计算器案例 ✨个人主页:颜颜yan_的个人主页 ⏰预计时间:30分钟 🎉专栏系列:我的第一个微信小程序 嗨嗨嗨,好久没更新小程序专栏了,本期浅浅用小程序写一个计算器。 最终代码会上传至资源噢~ 新建一个项目,在app.json中配置文件导

    2024年01月17日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包