当前位置:

首页 > 编程开发 > Java怎么实现简单计算器小程序

Java怎么实现简单计算器小程序

图计算器程序框架代码如下:packagetst.jframe;importjava.awt.EventQueue;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JTextField;importjava.awt.Font;importjavax.swing.SwingConsta

本文目录

    Java怎么实现简单计算器小程序

    图 计算器程序框架

    代码如下:

    package tst.jframe;
     
    import java.awt.EventQueue;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JTextField;
    import java.awt.Font;
    import javax.swing.SwingConstants;
     
    public class javaAP {
     
     /**
      * 各控件对象的建立
      * 
      * */
     private JFrame frame;
     private JTextField result;
     private JButton button_1;
     private JButton button_2;
     private JButton button_3;
     private JButton button_4;
     private JButton button_5;
     private JButton button_6;
     private JButton button_7;
     private JButton button_8;
     private JButton button_9;
     private JButton button_0;
     private JButton Button_equal;
     private JButton button_dot;
     private JButton button_d0;
     private JButton button_plus;
     private JButton button_sub;
     private JButton button_clr;
     private JButton button_dlt;
     private JButton button_mul;
     private JButton button_div;
     
     /**
      * 几个变量,用于计算、判定,存放结构等。
      * */
     private boolean numflag = false;     //用于标识是否输入数字
     private boolean opflag = false;   //用于标识是否输入运算操作符
     private String txt = null;    //显示结果的文本框的文本内容,用于存放计算结果的字符串形式
     private String num_txt = "";   //每次输入一个数,以字符的形式加到该字符创变量,后面运算直接将该字符创转成double类型进行运算
     private String op = " ";    //存放输入的运算操作符
     private double num1 = 0;    //num1和num2用作运算 
     private double num2 = 0;
     
     
     /**
      * Launch the application.
      */
     public static void main(String[] args) {
      EventQueue.invokeLater(new Runnable() {
       public void run() {
        try {
         javaAP window = new javaAP();
         window.frame.setVisible(true);
        } catch (Exception e) {
         e.printStackTrace();
        }
       }
      });
     }
     
     /**
      * 调用控件初始化函数,创建程序。
      */
     public javaAP() {
      initialize();
     }
     
     
     /**
      * 初始化计算器的各个控件。
      */
     private void initialize() {
      frame = new JFrame();                                   //-----------------------------------------------
      frame.setResizable(false);        //
      frame.setBounds(100, 100, 371, 371);     // 窗口各个属性的初始化
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //
      frame.getContentPane().setLayout(null);     //-----------------------------------------------
      
      result = new JTextField();        //-----------------------------------------------
      result.setFont(new Font("Lao UI", Font.BOLD, 15));  //
      result.setHorizontalAlignment(SwingConstants.RIGHT);    //
      result.setBounds(29, 28, 308, 50);      //  显示结果的文本框的各个属性的初始化
      frame.getContentPane().add(result);      //
      result.setColumns(10);         //
      result.setText(txt);         //-----------------------------------------------
      
      
      /**
       * 0-9, 小数点,00 各个控件的初始化,给每个控件添加动作监听事件,每个控件被按下则调用numBtnAction函数。
       * 
       * */
      
      button_0 = new JButton("0");
      button_0.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
        numBtnAction("0");
       }
      });
      button_0.setBounds(99, 273, 50, 50);
      frame.getContentPane().add(button_0);
      
      button_1 = new JButton("1");
      button_1.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
         numBtnAction("1");
       }
      });
      button_1.setBounds(99, 213, 50, 50);
      frame.getContentPane().add(button_1);
      
      button_2 = new JButton("2");
      button_2.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
         numBtnAction("2");
       }
      });
      button_2.setBounds(159, 213, 50, 50);
      frame.getContentPane().add(button_2);
      
      button_3 = new JButton("3");
      button_3.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
        numBtnAction("3");
       }
      });
      button_3.setBounds(219, 213, 50, 50);
      frame.getContentPane().add(button_3);
      
      button_4 = new JButton("4");
      button_4.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
        numBtnAction("4");
       }
      });
      button_4.setBounds(99, 157, 50, 50);
      frame.getContentPane().add(button_4);
      
      button_5 = new JButton("5");
      button_5.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
        numBtnAction("5");
       }
      });
      button_5.setBounds(159, 157, 50, 50);
      frame.getContentPane().add(button_5);
      
      button_6 = new JButton("6");
      button_6.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
        numBtnAction("6");
       }
      });
      button_6.setBounds(219, 157, 50, 50);
      frame.getContentPane().add(button_6);
      
      button_7 = new JButton("7");
      button_7.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
        numBtnAction("7");
       }
      });
      button_7.setBounds(99, 97, 50, 50);
      frame.getContentPane().add(button_7);
      
      button_8 = new JButton("8");
      button_8.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
        numBtnAction("8");
       }
      });
      button_8.setBounds(159, 97, 50, 50);
      frame.getContentPane().add(button_8);
      
      button_9 = new JButton("9");
      button_9.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
        numBtnAction("9");
       }
      });
      button_9.setBounds(219, 97, 50, 50);
      frame.getContentPane().add(button_9);
        
      button_dot = new JButton(".");
      button_dot.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
        numBtnAction(".");
       }
      });
      button_dot.setFont(new Font("宋体", Font.BOLD, 15));
      button_dot.setBounds(159, 273, 50, 50);
      frame.getContentPane().add(button_dot);
      
      button_d0 = new JButton("00");
      button_d0.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
        numBtnAction("00");
       }
      });
      button_d0.setBounds(219, 273, 50, 50);
      frame.getContentPane().add(button_d0);
      
      /**
       * 运算符  =,+,-,*,/ 的初始化。
       * */
      
      Button_equal = new JButton("=");
      Button_equal.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
        if(opflag == true){
         num2 = Double.parseDouble(num_txt);  //如果此时opflag为true的话,证明已经输入运算符,这时候刚输入的数为另外一个操作数,所以赋给num2。
         calc(op);       //num1和num2进行运算。
        }
        result.setText(new Double(num1).toString());   //显示结果。
       }
      });
      Button_equal.setBounds(279, 213, 50, 110);
      frame.getContentPane().add(Button_equal);
      
      button_plus = new JButton("+");
      button_plus.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
        opBtnAction("+");
       }
      });
      button_plus.setBounds(279, 97, 50, 50);
      frame.getContentPane().add(button_plus);
      
      button_sub = new JButton("-");
      button_sub.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
        opBtnAction("-");
       }
      });
      button_sub.setBounds(279, 157, 50, 50);
      frame.getContentPane().add(button_sub);
      
      button_mul = new JButton("*");
      button_mul.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
        opBtnAction("*");
       }
      });
      button_mul.setBounds(39, 157, 50, 50);
      frame.getContentPane().add(button_mul);
      
      button_div = new JButton("/");
      button_div.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
        opBtnAction("/");
       }
      });
      button_div.setBounds(39, 97, 50, 50);
      frame.getContentPane().add(button_div);
      
      /**
       * 功能键clr:清空   和  dlt回删   两个按键的初始化。
       * 
       * */
      
      button_clr = new JButton("clr");
      button_clr.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
        result.setText(null);        //清楚文本框和num_txt,num1和num2全部置为0,
        txt = null;          //numflag和opflag均置为false,全部置为程序开始的默认值。
        numflag = opflag = false;
        num1 = num2 = 0;
        num_txt = "";
       }
      });
      button_clr.setBounds(39, 273, 50, 50);
      frame.getContentPane().add(button_clr);
      
      button_dlt = new JButton("dlt");
      button_dlt.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
        if(num_txt != "" && num_txt.length() > 0) {
         num_txt = num_txt.substring(0, num_txt.length() - 1);  //通过截取字符串的方式回删一个字符
        }
        if(txt != null && txt.length() > 0) {
         txt = result.getText().substring(0,txt.length() - 1);  //结果文本框的回删
         result.setText(txt);
        }
       }
      });
      button_dlt.setBounds(39, 213, 50, 50);
      frame.getContentPane().add(button_dlt);
       
     }
     
     /**
      * 每个数字按键按下后触发的功能。
      * 
      * @param num 传入字符串形式的数字
      * 
      * */
     private void numBtnAction(String num) { 
      if(num_txt == "" && opflag == false) {    //判断是否num_txt是否为空,opflag是否为false,若满足这两个
       result.setText(null);      //条件,则为一次运算完毕,切新运算不以该次结果继续做运算。
       num_txt = "";
      } 
      numflag = true;         //只要输入一个数,则把numflag置为true,表示已有数字输入
      num_txt += num;         //把输入的数加入到最终要转换成都double运算的字符串
      txt = result.getText() + num;     //加到txt,使输入的数显示到文本框中。
      result.setText(txt);
      
     }
     
     /**
      * 点下运算符键触发的动作
      * 
      * @param operator 点击的运算符
      * 
      * */
     private void opBtnAction(String operator) {
      
     
      if(opflag == false && num_txt != "") {   //进行判断,如果opflag为false,则表示还没输入运算符,         
       num1 = Double.parseDouble(num_txt);   //这个时候把num_txt转换成double赋给num1。
      }
      if(opflag == true && num_txt != ""){
       num2 = Double.parseDouble(num_txt);   //如果opflag为true,表示第一个数输入完毕,且已输入相应的运算符,这个时候是在输入第二个要参与运算的数,则加到num2
       calc(op);         //先计算两数结果,赋给num1,num2置为0,以便后面多层混合运算使用。
      }
      numflag = false;        //numflag置为0,表示当前需要输入数进行运算
      op = operator;         //把新输入的运算符赋给op
      result.setText(operator + " ");     //在文本框显示
      opflag = true;         //opflag置为true,表示当前已输入一个或多个操作数。
      num_txt = "";         //num_txt置为空,为了存储下一个操作数。
     }
     
     /**
      * 进行  +、-、*、/ 的运算
      * @param op 运算符 
      * 
      * */
     private void calc(String op) {
      switch(op){
      case "+" : 
           num1 = num1 + num2;
           num2 = 0;
           opflag = false;
           num_txt = "";
           break;
           
      case "-" :
           num1 = num1 - num2;
           num2 = 0;
           opflag = false;
           num_txt = "";
           break;
           
      case "*" :
         if(num2 != 0) {
          num1 = num1 * num2;
          num2 = 0;
          opflag = false;
          num_txt = "";
         }
         break;
         
      case "/" : 
         if(num2 != 0) {
          num1 = num1 / num2;
          num2 = 0;
          opflag = false;
          num_txt = "";
         } 
         break;
         
      default:   opflag = false;
           num_txt = "";
           break;
      }
     }
    }
    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 小程序 Java
    上一篇: java Match怎么使用
    相关文章 更多
    雀大侠视频与文案提取:小程序入口和结果功能
    雀大侠视频与文案提取:小程序入口和结果功能

    了解雀大侠视频提取和文案提取的界面、分享内容输入方式与结果页功能,使用前核对输出内容和适用范围。

    Java单元测试入门:使用JUnit 5编写第一个测试用例
    Java单元测试入门:使用JUnit 5编写第一个测试用例

    面向初学者的JUnit 5实用入门指南。从测试概念、Maven依赖配置,到手把手编写首个单元测试用例及断言验证,助你掌握Java单元测试的核心流程。

    Java变量未初始化报错解析:局部变量与成员变量默认值差异
    Java变量未初始化报错解析:局部变量与成员变量默认值差异

    深入解析Java中局部变量未初始化编译报错与成员变量自动赋予默认值的机制差异,涵盖JVM内存分配、编译期确定性赋值检查与实际排查修复方案。

    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat
    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat

    详细讲解在Java中获取当前系统时间并进行格式化输出的两种核心方案:基于Java 8全新日期时间API的DateTimeFormatter与传统遗留的SimpleDateFormat,包含完整代码示例、线程安全机制对比及生产选型建议。

    Java中final与static final常量的定义及初始化规则
    Java中final与static final常量的定义及初始化规则

    深入解析Java中final变量与static final常量的定义、内存语义、初始化时机及合法赋值路径,涵盖编译期常量优化与实战避坑指南。

    Java抽象方法与接口方法的区别及选型建议
    Java抽象方法与接口方法的区别及选型建议

    深入对比Java中抽象类抽象方法与接口方法的语法演进、设计意图及运行期差异,并提供清晰的架构选型决策流程与实战范例。

    Java实现HTTP请求与JSON解析的完整代码示例
    Java实现HTTP请求与JSON解析的完整代码示例

    本文提供Java标准库HttpClient发起HTTP GET/POST请求并结合Jackson进行JSON数据反序列化与序列化的完整代码示例与工程实践指南。

    Java递归出现StackOverflowError的原因分析及栈空间优化方案
    Java递归出现StackOverflowError的原因分析及栈空间优化方案

    详细分析Java递归调用出现StackOverflowError的原因,结合代码说明线程栈、栈帧和递归深度之间的关系,并介绍终止条件排查、迭代改写、减少栈帧开销以及通过-Xss调整JVM栈空间的方法。

    Java空指针异常(NPE)的代码排查与修复实例
    Java空指针异常(NPE)的代码排查与修复实例

    针对Java中常见的NullPointerException(NPE),本文从堆栈日志定位、典型代码触发场景、具体修复代码对比到防御体系进行系统讲解,提供实用且易上手的排查与修复方案。

    selenium上传文件教程本地文件路径设置方法
    selenium上传文件教程本地文件路径设置方法

    深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。