java实现基础的图形化计算器功能

以下代码可以实现基础的计算器功能,我也是个新手写的烂见谅

这也是本账号的第一篇文章

我又发了一篇文章,里面更新了计算器的功能有兴趣可以看一下

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Pattern;

public class jiSuanQi extends Frame implements ActionListener {
    StringBuilder shuRu = new StringBuilder();  //记录输入的值
    double shuA, shuB;  //记录操作数"shuA""shuB"
    Double out;  //记录运算结果"out"
    int yunSuan = 0;  //记录运算  0为空  1为+ 2为- 3为× 4为÷
    JTextArea jieGuo = new JTextArea("0", 1, 12);  //创建文本框大小和默认文字


    public static void main(String[] args) {
        jiSuanQi jiSuanQi = new jiSuanQi();  //主类调用计算器
    }


    public jiSuanQi() {
        //创建主窗口
        JFrame chuangKou = new JFrame("计算器");  //创建窗口命名“计算器”
        chuangKou.setLayout(new BorderLayout());  //设置布局为BorderLayout


        //编辑显示区域
        JPanel xianShi = new JPanel();  //创建“显示”面板
        jieGuo.setFont(new Font("微软雅黑", Font.BOLD, 30));  //设置字体
        jieGuo.setBounds(0, 0, 10, 10);
        jieGuo.setBackground(Color.white);  //设置背景为白色
        jieGuo.setEditable(false);  //设置文本域不可编辑
        xianShi.add(jieGuo);  //把计算结果加入面板


        //创建键盘区域
        JPanel jianPan = new JPanel();  //创建键盘面板
        jianPan.setLayout(new GridLayout(4, 4, 6, 6));  //设置布局样式为4行4列间隔6
        Dimension anNiuDaXiao = new Dimension(6, 60);  //设置按钮大小
        String ziFu = "789+456-123×.0=÷";  //设置按钮顺序
        for (int i = 0; i < ziFu.length(); i++) {  //循环向键盘区域添加按钮
            anNiu(ziFu.charAt(i) + "", jianPan, anNiuDaXiao);
        }


        //向窗口添加“显示区域”和“键盘区域”
        chuangKou.add(xianShi, BorderLayout.NORTH);  //显示区域加到窗口上面
        chuangKou.add(jianPan, BorderLayout.SOUTH);  //键盘区域加到窗口下面


        //设置大小及显示窗口
        chuangKou.setBounds(800, 100, 400, 400);  //设置窗口位置和大小
        chuangKou.setResizable(false);  //设置窗口大小无法更改
        chuangKou.setDefaultCloseOperation(chuangKou.EXIT_ON_CLOSE);  //关闭窗口即结束程序
        chuangKou.setVisible(true);  //显示窗口
    }

    public void anNiu(String title, JPanel jianPan, Dimension anNiuDaXiao) {  //设置按钮
        JButton button = new JButton(title);  //建立按钮并设置显示符号
        button.setPreferredSize(anNiuDaXiao);  //设置按钮大小
        button.setFont(new Font("微软雅黑", Font.BOLD, 30));  //设置按钮字体
        if (isNumeric(title)) {  //判断传入“title”是否为数字
            button.setBackground(new Color(230, 230, 250));  //是数字则更改背景为定义的颜色,当前为淡紫色
        } else {
            button.setBackground(new Color(240, 248, 255));  //否则更改为定义的颜色,当前为淡蓝色
        }
        button.addActionListener(this);  //添加监听
        jianPan.add(button);  //向“键盘”添加按钮
    }


    public static boolean isNumeric(String str) {  //判断传入字符串是否为数字
        Pattern pattern = Pattern.compile("\\d*");  //通过正则表达式判断是否为数字
        return pattern.matcher(str).matches();  //返回结果
    }


    @Override
    public void actionPerformed(ActionEvent an) {  //重写接口以响应按钮
        String in = an.getActionCommand();  //获取按钮输入


        //判断按下的按钮并做出响应
        switch (in) {  //依次判断按下的按钮
            case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" -> {  //判断输入是否包含在0-9中
                System.out.println("按下了" + in);  //在控制台输出按下的按钮
                shuRu.append(in);  //在数字末尾加入按钮输入的值
                jieGuo.setText(shuRu.toString());  //刷新显示的数字
            }
            case "+", "-", "×", "÷" -> {   //判断按下的按钮是”+“
                System.out.println("按下了" + in);  //在控制台输出按下的按钮
                shuA = Double.parseDouble(shuRu.toString());  //记录"运算数A"
                switch (in) {  //判断运算符并记录
                    case "+" -> yunSuan = 1;  //记录“+”为1
                    case "-" -> yunSuan = 2;  //记录“-”为2
                    case "×" -> yunSuan = 3;  //记录“×”为3
                    case "÷" -> yunSuan = 4;  //记录“÷”为4
                }
                shuRu = new StringBuilder();  //清空输入的数字
                jieGuo.setText(in);  //显示运算符
            }
            case "=" -> {   //判断按下的按钮是”=“    以下注释同”+“的部分
                System.out.println("按下了" + in);  //在控制台输出按下的按钮
                shuB = Double.parseDouble(shuRu.toString());  //记录”运算数B“
                switch (yunSuan) {  //执行运算//判断执行何种运算
                    case 1 -> out = shuA + shuB;  //执行加法
                    case 2 -> out = shuA - shuB;  //执行减法
                    case 3 -> out = shuA * shuB;  //执行乘法
                    case 4 -> out = shuA / shuB;  //执行除法
                }
                jieGuo.setText(out.toString());  //输出结果
                shuRu = new StringBuilder();  //重置输入的数字
            }
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值