Java实现简单图形界面计算器

来一份详细的“Java实现简单图形界面计算器”的攻略吧。

一、概述

本攻略将带领读者用Java实现一个简单的图形界面计算器。主要用到的技术是Swing,一个Java提供的GUI工具包。通过这个攻略,读者将了解到如何使用Swing快速完成一个图形界面程序的开发。

二、实现步骤

  1. 创建项目

首先,我们需要创建一个Java项目。可以使用Eclipse/IDEA等开发工具来创建项目,并添加Swing所需的库文件。

  1. 创建主界面

创建MainUI类,该类是GUI程序的主界面。界面中需要添加一个文本框用于显示计算结果,以及多个按钮用于用户输入。

public class MainUI extends JFrame {
    private JPanel contentPane;     // 界面的主容器
    private JTextField resultField; // 显示计算结果的文本框
    // 声明多个按钮组件
    private JButton btn1, btn2, ... , btn0, btnPlus, btnMinus, btnMul, btnDiv, btnClear, btnEqual;

    // 构造函数
    public MainUI() {
        // 设置界面标题
        setTitle("计算器");

        // 设置界面大小
        setBounds(100, 100, 300, 400);

        // 获取界面的主容器
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        // 初始化各个组件
        resultField = new JTextField();
        resultField.setHorizontalAlignment(SwingConstants.RIGHT);
        resultField.setBounds(10, 10, 260, 40);
        contentPane.add(resultField);

        btn1 = new JButton("1");
        btn1.setBounds(10, 60, 50, 50);
        contentPane.add(btn1);

        btn2 = new JButton("2");
        btn2.setBounds(70, 60, 50, 50);
        contentPane.add(btn2);

        // ...省略部分代码

        btnClear = new JButton("清空");
        btnClear.setBounds(10, 250, 110, 50);
        contentPane.add(btnClear);

        btnEqual = new JButton("=");
        btnEqual.setBounds(140, 250, 110, 50);
        contentPane.add(btnEqual);
    }
}
  1. 添加按钮事件

在实现按钮事件之前,先来了解一下Java中的事件机制。

Java中的事件机制主要有事件源、事件对象、事件监听器、事件处理等一系列概念。事件源是发生事件的对象,比如按钮、文本框等,事件对象是发生事件的信息,比如按钮按下、文本框内容改变等。事件监听器则是用于处理事件的接口,事件处理则是在事件发生后执行的代码。

public class MainUI extends JFrame {
    // ... 省略部分代码

    // 添加按钮事件监听
    public void addButtonListeners() {
        // 为数字按钮添加事件
        btn1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                resultField.setText(resultField.getText() + "1");
            }
        });

        // ...省略部分代码

        // 为“=”按钮添加事件
        btnEqual.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String res = Calculator.calculate(resultField.getText());
                resultField.setText(res);
            }
        });

        // 为“清空”按钮添加事件
        btnClear.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                resultField.setText("");
            }
        });
    }
}

在上面的代码中,我们使用了匿名类的方式来实现按钮事件监听器,可以让代码更加简洁易懂。

  1. 实现计算功能

接下来,我们来实现计算功能。为了让代码更加清晰易懂,我们将计算函数实现放在Calculator类中。

public class Calculator {
    public static String calculate(String expression) {
        String[] tokens = expression.split(" ");

        Stack<Double> stack = new Stack<Double>();

        for(String token : tokens) {
            if(token.equals("+")) {
                double b = stack.pop();
                double a = stack.pop();
                stack.push(a + b);
            } else if(token.equals("-")) {
                double b = stack.pop();
                double a = stack.pop();
                stack.push(a - b);
            } else if(token.equals("*")) {
                double b = stack.pop();
                double a = stack.pop();
                stack.push(a * b);
            } else if(token.equals("/")) {
                double b = stack.pop();
                double a = stack.pop();
                stack.push(a / b);
            } else {
                stack.push(Double.parseDouble(token));
            }
        }

        return String.format("%.2f", stack.pop());
    }
}

在上面的代码中,我们使用了栈(Stack)来处理表达式中的运算符和操作数。

  1. 运行程序

最后,我们只需要通过Main函数来创建主界面对象,并为按钮添加事件监听器,然后显示主界面即可。

public class Main {
    public static void main(String[] args) {
        MainUI frame = new MainUI();
        frame.addButtonListeners();
        frame.setVisible(true);
    }
}

三、示例

下面我们将通过两个示例来演示这个计算器程序。

示例1

输入:2 + 3 * 4

可以看到,程序的输出结果为14.00,符合预期。

示例2

输入:( 2 + 3 ) * 4

这个表达式中有括号,但是我们的计算器程序并没有对括号进行处理。程序的输出结果为null,这明显是有问题的。因此,我们需要对程序进行修复,使其能够正确处理各种表达式。

四、总结

通过本攻略的介绍,我们了解到了如何使用Java中的Swing库快速实现一个简单的图形界面计算器,主要的步骤包括创建界面、添加按钮事件、实现计算功能等。同时,我们也引入了栈这个数据结构来处理表达式中的运算符和操作数。在实际应用中,我们可以根据这个示例程序来扩展实现更加复杂的计算器。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现简单图形界面计算器 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • java中thread线程start和run的区别

    Java中,线程是程序的执行流,它是在进程中执行的。可以通过继承Thread类或实现Runnable接口来创建线程。在创建线程时,我们需要注意线程的生命周期。在Java中,线程的生命周期可以分为New、Runnable、Blocked、Waiting、Timed Waiting和Terminated这6种状态。 线程的启动是通过调用start方法来实现的;线…

    Java 2023年5月26日
    00
  • 详解HTTP请求与响应基础及实例

    详解HTTP请求与响应基础及实例 HTTP是一种用于网络传输的协议,它定义了客户端和服务器之间进行通信的规则。在HTTP通信过程中,客户端向服务器发送请求,服务器则对请求进行处理并返回响应,由此构成了HTTP请求和响应的基础。 HTTP请求 HTTP请求由三部分构成:请求行、请求头和请求体。其中,请求行包含请求的方法、URI和HTTP版本号,请求头包含了请求…

    Java 2023年5月20日
    00
  • JSP+Servlet+JavaBean实现登录网页实例详解

    让我来为你详细讲解关于“JSP+Servlet+JavaBean实现登录网页实例”的攻略。本攻略主要包括以下内容: 环境搭建 创建登录页面 编写Servlet 编写JavaBean 实现功能 示例说明 1. 环境搭建 首先,我们需要准备好环境。在开始之前,确保你已经完成以下准备工作: 安装好Java开发环境,包括JDK和IDE(例如Eclipse、Intel…

    Java 2023年6月15日
    00
  • 什么是双亲委派模型?

    以下是关于双亲委派模型的详细讲解: 什么是双亲委派模型? 双亲委派模型是一种类加载机制,它是由 Java 虚拟机(JVM)实现的。在双亲委派模型中,当一个类加载器收到类加载请求时,它首先将请求委派给父类加载器,如果父类加载器无法加载该类,则将请求委派给其子类加载器。这个过程会一直持续到顶层的启动类加载器,如果启动类加载器无法加载该类,则会抛出 ClassNo…

    Java 2023年5月12日
    00
  • Java集合功能与用法实例详解

    Java集合功能与用法实例详解 Java集合是Java编程语言中的一种容器,可以存储和操作对象。Java集合提供了一组接口和类,用于快速创建各种不同类型的集合,如列表(List)、集(Set)、图(Map)等。在本文中,我们将详细探讨Java集合的功能和用法,并提供两个实例说明。 Java集合的分类 Java集合被分为以下三个主要类别: List:列表类集合…

    Java 2023年5月26日
    00
  • Linux系统中jdk环境配置方式

    下面是详细的Linux系统中配置jdk环境的攻略。包含两条示例说明,以供参考: 安装JDK 下载Java JDK 首先需要去Oracle官网下载适合的JDK版本,根据系统位数选择相应的版本进行下载。安装前请确保已经安装了wget和tar。 bash $ wget –no-check-certificate –no-cookies –header \ “…

    Java 2023年5月24日
    00
  • Mybatis中的高级映射一对一、一对多、多对多

    下面我就为你详细讲解Mybatis中的高级映射一对一、一对多、多对多的攻略。 一对一映射 一对一映射指的是两个实体类之间的一对一关系,通常情况下是通过外键关联的。在Mybatis中,我们可以使用resultMap嵌套resultMap来实现一对一映射。 首先,我们需要创建两个Java Bean类,分别为用户(User)和身份证(Identity)类。这两个类…

    Java 2023年5月20日
    00
  • 一文详解SpringBoot如何优雅地实现异步调用

    一文详解Spring Boot如何优雅地实现异步调用 在Spring Boot应用程序中,我们经常需要进行异步调用,以提高应用程序的性能和响应速度。本文将详细讲解如何在Spring Boot应用程序中优雅地实现异步调用。 步骤一:添加依赖 我们需要在pom.xml文件中添加以下依赖项: <dependency> <groupId>or…

    Java 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部