JAVA:从零开始写一个计算器

本文详细介绍了如何使用JAVA Swing构建一个具备图形化界面的计算器,包括设置面板、文本框、按钮,处理各种计算公式,实现连续运算,以及监听用户点击事件。在难点解析中,涉及了弧度转角度计算,连续运算的逻辑处理,以及对用户输入的响应机制。
摘要由CSDN通过智能技术生成

目录

计算器功能

各种难点

难点1:图形化界面

难点2:各种计算公式

难点3:连续运算

难点4:对用户的点击进行监控及准确反应

源码


计算器功能

一个简单的计算器,应该具有图形化界面,各种Button,一个结果显示屏,支持加减乘除,N次方,N次方根,求sin,cos,tan以及对应的反sin,cos,tan,log。

各种难点

难点1:图形化界面

这里我选用的是JAVA.Swing。

1,先用JPane和JFramel构建我们的窗口,JPanel是一个通用的轻量级容器,先定义一个JPanel panel,然后在main方法里面用panel = new JPanel;创造窗口。用setBackground设置颜色。

JPanel panel;
panel = new JPanel;
panel.setBackground(Color.BLUE);

2,用JTextField输出计算结果,JTextField是一个轻量级组件,允许编辑单行文本。

  • JTextField的水平对齐可以设置为左对齐,前导对齐,居中,右对齐或尾对齐。 如果字段文本的所需大小小于分配给它的大小,则右/尾对齐很有用。 这由setHorizontalAlignmentgetHorizontalAlignment方法确定。 默认值是前导对齐。

  • JTextField
    • public JTextField():构造一个新的TextField 。 创建默认模型,初始字符串为null ,列数设置为0。
    • public JTextField​(String text):构造一个使用指定文本初始化的新TextField 。 将创建默认模型,列数为0。
    • public JTextField​(int columns):构造具有指定列数的新空TextField 。 将创建默认模型,并将初始字符串设置为null
    • public JTextField​(String text, int columns):构造一个使用指定文本和列初始化的新TextField 。 创建默认模型。
    • public JTextField​(Document doc, String text, int columns):构造一个新的JTextField ,它使用给定的文本存储模型和给定的列数。 这是其他构造函数通过其提供的构造函数。 如果文档是null ,则创建默认模型。
  • setHorizontalAlignment
    • 设置文本的水平对齐方式。 有效密钥是:
      
      • JTextField.LEFT
      • JTextField.CENTER
      • JTextField.RIGHT
      • JTextField.LEADING
      • JTextField.TRAILING
      设置对齐时将调用invalidaterepaint ,并PropertyChange事件(“horizontalAlignment”)。
  • setFont
    • public void setFont​(Font f):设置当前字体。 这将删除缓存的行高和列宽,以便反映新字体。 设置字体后调用revalidate。
JTextField display;
display = new JTextField(20);
display.setEditable(false);
display.setText(displayText);

3,用JButton创建计算器的各种按键

 然后添加事情监听器,这样用户按下按键就能给我们一个值用于判断。用panel.add(JButton);添加按钮到容器中。

难点2:各种计算公式

result = Math.pow(operand2, 2);
result = Math.pow(operand2, 3);
result = Math.sqrt(operand2);
result = Math.sin(operand2*Math.PI/180);
result = Math.cos(operand2*Math.PI/180);
result = Math.tan(operand2*Math.PI/180);
result = Math.log10(operand2);
result = Math.log(operand2);
result = Math.asin(operand2);
result = Math.acos(operand2);
result = Math.atan(operand2);
result = operand2-2*operand2;
result = Math.cbrt(operand2);

sin,cos,tan这里不光要用Math公式,还要把输入的数值从弧度制转化为角度制再带入计算。

难点3:连续运算

要实现连续运算,就需要记录下前2次运算的结果,然后依次运算,每次运算都保留运算结果用于下次运算。先定义2个变量operand1,operand2用于保存用户输入的数值,再定义一个operator用于保存用户输入的运算符。然后增加判断条件,如果用户按下数字,再屏幕上显示数字,如果用户按下运算符+-*/,则记录屏幕上已经有的数字为operand1,然后准备记录下一个数字operand2,所以要清空屏幕。用户输入第二个数字按下=,记录屏幕上的数字为operand2,然后运算,输出结果。operator一开始定义好了之后是null,只有用户按过运算符才会改变,所以判断operator是不是null就可以判断是否是连续运算。

//        判断是否连续运算
        else if (operator != null){
            displayText = Double.toString(computeResult());
            display.setText(displayText);
            operand1 = Double.parseDouble(displayText);
            shouldAppendDigitToNumber = false;
            operator=String.va
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值