JavaExp8:利用GUI实现简易计算器

Posted 咳咳n

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaExp8:利用GUI实现简易计算器相关的知识,希望对你有一定的参考价值。

JavaExp8:利用GUI实现简易计算器

package EXP2020.exp8;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * @author JMChen
 * @date 2020/4/28
 */

/**创建计算器类继承窗口框架,同时实现ActionListener接口*/
class Calculator extends JFrame implements ActionListener 
    private final String[] str = 
            "7", "8", "9", "/",
            "4", "5", "6", "*",
            "1", "2", "3", "+",
            "0", ".", "=", "-"
    ;


    JButton[] buttons = new JButton[str.length];   //设置数字数字和操作符的按钮
    JButton clear = new JButton("clear");     //以及重置按键
    JTextField showResult = new JTextField("0");      //显示结果

    //定义构造函数设计出计算器框架
    public Calculator() 
        super("EasyCalculator");
        Font font = new Font("Console", Font.BOLD, 20);

        //设置头部面板
        JPanel pnlHead = new JPanel(new BorderLayout());
        pnlHead.add(showResult, BorderLayout.CENTER);
        pnlHead.add(clear, BorderLayout.EAST);
        showResult.setFont(font);
        clear.setFont(font);

        //设置中间的面板部分
        JPanel pnlBody = new JPanel(new GridLayout(4, 4));

        //将按钮组件加入面板
        for (int i = 0; i < str.length; i++) 
            buttons[i] = new JButton(str[i]);
            buttons[i].setFont(font);
            pnlBody.add(buttons[i]);
        

        //将头部显示计算结果的面板和中下部装数字/操作符按钮的面板加到一个大容器中
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add("North", pnlHead);
        getContentPane().add("Center", pnlBody);

        //注册监听器
        for (int i = 0; i < str.length; i++)
            buttons[i].addActionListener(this);
        clear.addActionListener(this);
        showResult.addActionListener(this);

        //设置窗口属性
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(400, 600);
        setLocation(1000, 300);
        setVisible(true);

    

    //重写接口的方法,分别调用处理按键为清空、数字、操作符的方法
    public void actionPerformed(ActionEvent e) 
        Object target = e.getSource();//得到事件发生的对象源
        String cmd = e.getActionCommand();
        String patten = "0123456789.";
        if (target == clear) handleClear();
        else if (patten.indexOf(cmd) > 0)
            handleNumber(cmd);
        else
            handleOperation(cmd);
    

    boolean isFirstDigit = true;    //按完按钮后的状态
    double result = 0;              //记录下当前结果
    String operation = "=";         //记录上次运算的符号
    //如果是对=按钮的点击操作,则我们需要得到上次动作命令的信息,
    // 因为本次事件中只能得到按钮标签的信息= 和 按钮动作命令名称=,
    // 无法得到上次执行的到底是+还是-还是*还是/操作,所以我们需要单独定义一个属性用来记录动作命令名称的信息



    //处理数字
    public void handleNumber(String cmd) 
        //如果是第一次输入数字,就把数字显示出来
        if (isFirstDigit)
            showResult.setText(cmd);
            //否则把面板已经有的加上当前的
        else if (!cmd.equals("."))
            showResult.setText(showResult.getText() + cmd);
            //如果输入的是小数点,且原来的没有小数点,就把小数点加到显示面板上去
        else if (showResult.getText().indexOf(".") < 0)
            showResult.setText(showResult.getText() + ".");
        isFirstDigit = false;
    

    //处理清空
    public void handleClear() 
        showResult.setText("0");
        isFirstDigit = true;
        operation = "0";
        result = 0;
    

    //处理操作符
    public void handleOperation(String cmd) 
        //把字符串转化为实数计算
        double number = Double.valueOf(showResult.getText());

        if (operation.equals("+"))
            result += number;
        else if (operation.equals("-"))
            result -= number;
        else if (operation.equals("*"))
            result *= number;
        else if (operation.equals("/"))
            result /= number;
        else if (operation.equals("="))
            result = number;
        //显示结果
        showResult.setText(String.valueOf(result));
        operation = cmd;            //记录下上一个结果
        isFirstDigit = true;        //准备接受一个新的数字的状态
    


/**
 * 主测试类
 */
public class MyCalculator 
    public static void main(String[] args) 
        Calculator calculator = new Calculator();
    


基本的四则运算功能是可以实现的,但是不够完善,还是有些缺陷。

以上是关于JavaExp8:利用GUI实现简易计算器的主要内容,如果未能解决你的问题,请参考以下文章

GUI编程事件监听以及简易加法计算器的实现

JAVA GUI制作一个简易计算器

用java编写一个简单计算器

GUI03 简易计算器组合+内部类回顾复习

GUI03 简易计算器组合+内部类回顾复习

手把手带你利用栈来实现一个简易版本的计算器