简易计算器的实现

1.实训目的

通过一个计算器的设计来综合运用所学的相关知识(Java的数据类型、AWT包、用户自定义类、窗体的布局、方法的定义和添加事件处理)。

2.实训内容与要求

编写一个简易的计算器程序。用户可以利用鼠标单击数值或操作符按钮完成计算,计算的结果被显示在窗口上部的文本框中,

设计界面如图所示

4. 实训步骤与内容
(1)新建一个应用程序,类名为"Calculator",该类继承了 JFrame类。添加构造方法完成对窗体的标题栏、大小、定位等初始化的设置。代码如下:

import javax.swing.JFrame;

public class Calculator extends JFrame implements ActionListener {

    public Calculator() {
    	setTitle("计算器");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300, 400);
        setLocation(500,300);
        setVisible(true);
   }

    public static void main(String[] args) {
        Calculator calculator=new Calculator();
        
    }
}

(2)设置了一个用于显示的JTextField,并创建了一个包含各种按钮的按钮面板,用于执行计算器操作。按钮包括基本的算术运算,以及诸如平方根、幂、百分比和倒数等功能。另外,还有一个“C”按钮,用于清除。

       display = new JTextField("0");
        currentInput = 0;
        currentOperator = "";
        startNewInput = true;

 
        JPanel buttonPanel = new JPanel(new GridLayout(6, 4, 5, 5));

        
        String[] buttonLabels = {
        		"sqrt","pow","%","1/x",
        		"7", "8", "9", "/", 
                "4", "5", "6", "*", 
                "1", "2", "3", "-", 
                ".", "0", "=", "+", 
                "C"
        };
       
        for (String label : buttonLabels) {
            JButton button = new JButton(label);
            button.addActionListener(this);
            buttonPanel.add(button);
        }

        
        Container contentPane = getContentPane();
        contentPane.setLayout(new BorderLayout());
        contentPane.add(display, BorderLayout.NORTH);
        contentPane.add(buttonPanel, BorderLayout.CENTER);

       

    }

(3)添加一个事件处理方法,用于处理计算器按钮的点击事件。根据按钮的不同命令,它执行不同的操作。以下是它的功能描述:

  • 如果点击的是数字按钮,则根据是否需要开始新的输入,更新显示的内容。
  • 如果点击的是加减乘除按钮,则将当前显示的数字作为输入,并记录当前的操作符,准备接收下一个输入。
  • 如果点击的是等号按钮,则根据之前记录的操作符执行相应的计算,更新显示的内容,并准备接收下一个输入。
  • 如果点击的是清除按钮,则将显示内容重置为0,同时清空之前记录的输入和操作符。
  • 如果点击的是平方根、幂、百分比或倒数按钮,则根据当前显示的数字执行相应的数学运算,并更新显示的内容。

代码如下: 

	public void actionPerformed(ActionEvent e) {
        String action = e.getActionCommand();
        if (action.matches("[0-9]")) {
            if (startNewInput) {
                display.setText(action);
                startNewInput = false;
            } else {
                if (!action.equals(".")) {
                    display.setText(display.getText() + action);
                } else {
                    if (!display.getText().contains(".")) {
                        display.setText(display.getText() + ".");
                    }
                }
            }
        } else if (action.matches("[+\\-*/]")) {
            currentInput = Double.parseDouble(display.getText());
            currentOperator = action;
            startNewInput = true;
        } else if (action.equals("=")) {
            double newInput = Double.parseDouble(display.getText());
            if (currentOperator.equals("+")) {
                currentInput += newInput;
            } else if (currentOperator.equals("-")) {
                currentInput -= newInput;
            } else if (currentOperator.equals("*")) {
                currentInput *= newInput;
            } else if (currentOperator.equals("/")) {
                currentInput /= newInput;
            }
            display.setText(String.valueOf(currentInput));
            startNewInput = true;
        } else if (action.equals("C")) {
            display.setText("0");
            currentInput = 0;
            currentOperator = "";
            startNewInput = true;
        } else if (action.equals("sqrt")) {
            double value = Double.parseDouble(display.getText());
            display.setText(String.valueOf(Math.sqrt(value)));
        } else if (action.equals("pow")) {
            double value = Double.parseDouble(display.getText());
            display.setText(String.valueOf(Math.pow(value, 2)));
        } else if (action.equals("%")) {
            double value = Double.parseDouble(display.getText());
            display.setText(String.valueOf(value / 100));
        } else if (action.equals("1/x")) {
            double value = Double.parseDouble(display.getText());
            display.setText(String.valueOf(1 / value));
        } else if (action.equals(".")) {
            if (!display.getText().contains(".")) {
                display.setText(display.getText() + ".");
            }
        }
    }

有什么问题可以互相讨论,互相学习,与君共勉~~~

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值