计算器Java版(小玩具)

简介: 计算器Java版(小玩具)

纯Java语言的计算器

import javax.accessibility.AccessibleIcon;
import javax.swing.*;
import javax.swing.plaf.basic.BasicOptionPaneUI;
import java.awt.*;
import java.awt.event.*;
import java.awt.event.*;
import javax.swing.*;
public class Calculator extends JFrame implements ActionListener{
    /*******************北面控件****************************/
    private JPanel jp_north = new JPanel(); // 创建一个组件 装计算器的上部分
    private JTextField display_text = new JTextField();  // 计算器上面的现实栏
    private JButton cButton = new JButton("C");  // 计算器的清空键
    /*****************中间控件****************************/
    private JPanel jp_center = new JPanel();
    /*****************文本操作变量****************************/
    private String firstInput = null;  // 第一次输入的结果
    private String operator = null;   // 操作符
    public Calculator() throws HeadlessException {
        this.init();  // 初始化
        this.addNorthComponent();  // 设置北面控件
        this.addCenterButton();
    }
    public static class Const{  // 各种参数的类
        public static final int FRAME_W = 500;  // 窗口的宽和高
        public static final int FRAME_H = 500;
        public static final int SCREEN_W = Toolkit.getDefaultToolkit().getScreenSize().width;  // 获取显示屏宽和高
        public static final int SCREEN_H = Toolkit.getDefaultToolkit().getScreenSize().height;
        public static int FRAME_X = (SCREEN_W - FRAME_W) / 2;  // 设置窗口默认位置是屏幕的中央
        public static int FRAME_Y = (SCREEN_H - FRAME_H) / 2;
        public static final String TITLE = "计算器"; // 窗口的名称
    }
    public void init(){  // 初始化方法
        this.setTitle(Const.TITLE);  // 设置窗口名字
        this.setSize(Const.FRAME_W, Const.FRAME_H); // 设置窗口默认大小
        this.setLayout(new BorderLayout());  // 添加一个布局
        this.setResizable(true);  // 设置窗口大小不可以改变
        this.setLocation(Const.FRAME_X, Const.FRAME_Y);  // 设置窗口的默认位置
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  // 设置点击右上角的关闭 可以真正的关闭
    }
    // 添加北面控件
    public void addNorthComponent(){
        this.display_text.setPreferredSize(new Dimension(400, 40));  // 设置显示框的大小
        this.cButton.setPreferredSize(new Dimension(60,40)); // 设置清空按钮的大小
        this.cButton.setForeground(Color.red);  // 设置清空按钮的字体颜色
        jp_north.add(this.display_text);  // 拼装组件
        jp_north.add(this.cButton);
        cButton.addActionListener(new ActionListener() {  // 给这个案例添加清空功能
            @Override       // 使用匿名内部类的时候注意对外部的引用的时候 不要加this 因为匿名内部类也是一个内
            public void actionPerformed(ActionEvent e) {
                display_text.setText("");
                firstInput = null;
                operator = null;
            }
        });
        this.add(jp_north,BorderLayout.NORTH);  // 把组件放入框架
    }
    // 添加中间按钮
    public void addCenterButton(){
        String btn_text = "123+456-789*0.=/";  // 按钮的文字
        String regex = "[\\+\\-*/.=]"; // 写正则表达式
        this.jp_center.setLayout(new GridLayout(4, 4));
        for(int i = 0; i < 16; ++ i){
            String temp = btn_text.charAt(i) + "";  // 获取第i个字符串
            JButton btn = new JButton();
            btn.setText(temp);
            if (temp.matches(regex)){
                btn.setFont(new Font("粗体", Font.BOLD, 20));  // 如果是特殊符号那么就设置为粗体
                btn.setForeground(Color.red);
            } else {
                btn.setFont(new Font("正常", Font.ROMAN_BASELINE, 20)); // 数字设置为正常字体
            }
            jp_center.add(btn);
            btn.addActionListener(this);  // 给按钮添加监听
        }
        this.add(jp_center, BorderLayout.CENTER);
    }
    public static void main(String[] args) {
        Calculator calculator = new Calculator();
        calculator.setVisible(true);
    }
    @Override
    public void actionPerformed(ActionEvent e) {  // 给事件实例化
        String clickStr = e.getActionCommand(); // 获取监听事件
        if (".0123456789".indexOf(clickStr) != -1){
            this.display_text.setFont(new Font("正常", Font.ROMAN_BASELINE, 20)); // 设置显示文字的大小
            this.display_text.setText(this.display_text.getText() + clickStr);  // 显示文字
            this.display_text.setHorizontalAlignment(JTextField.RIGHT); // 从右开始显示文字
            // JOptionPane.showMessageDialog(this, clickStr);  // 测试是否建立监听成功
        } else if (clickStr.matches("[\\+\\-*/]{1}")){  // 写正则表达式 如果获取的是操作符中的一个
            this.operator = clickStr;
            this.firstInput = this.display_text.getText();  // 把上一次获取的字符 设置为上一次的字符
            this.display_text.setText("");  // 然后清空当前字符
        } else if (clickStr.equals("=")){  // 当输入的为=的时候就该输出结果了
            Double a = Double.valueOf(this.firstInput);  // 把上一次的输入的字符转化为实数
            Double b = Double.valueOf(this.display_text.getText());  // 把当前的字符也设置为实数
            Double result = null;
            Boolean flag = false;  // 标记一下除数是否为0
            switch(operator){
                case "+":
                    result = a + b;
                    break;
                case "-":
                    result = a - b;
                    break;
                case "*":
                    result = a * b;
                    break;
                case "/":
                    if (b == 0){
                        flag = true;
                    } else {
                        result = a / b;
                    }
                    break;
            }
            if (flag){  // 除数为0的情况
                this.display_text.setText("除数不能为0");
            } else {
                this.display_text.setText(result.toString());
            }
        }
    }
}

相关文章
|
6月前
|
Java
逆波兰计算器(java)
逆波兰计算器(java)
|
7月前
|
Java
Java实现简易计算器
Java实现简易计算器
473 5
|
7月前
|
Java
简单的 Java 计算器示例
【5月更文挑战第1天】这是一个Java计算器程序,接收用户输入的两个数字和一个运算符(+,-,*,/),通过`Scanner`获取输入,使用`switch`进行计算。当运算符为除法时,检查除数是否为0,防止除零错误。最后,它打印出计算结果。
91 0
|
7月前
|
Java 数据库连接
Java混合计算器以及界面切换
Java混合计算器以及界面切换
|
7月前
|
数据可视化 小程序 Java
【Java】——实现可视化加减乘除计算器
【Java】——实现可视化加减乘除计算器
【Java】——实现可视化加减乘除计算器
|
7月前
|
Python Java Go
Java每日一练(20230416) 三数之和、基本计算器、通配符匹配
Java每日一练(20230416) 三数之和、基本计算器、通配符匹配
66 0
Java每日一练(20230416) 三数之和、基本计算器、通配符匹配
|
7月前
|
Python Java 算法
Java每日一练(20230415) 扰乱字符串、单词拆分、模拟计算器
Java每日一练(20230415) 扰乱字符串、单词拆分、模拟计算器
63 0
Java每日一练(20230415) 扰乱字符串、单词拆分、模拟计算器
|
7月前
|
Java
【Java每日一题】— —第十三题:实现简单的计算器
【Java每日一题】— —第十三题:实现简单的计算器
|
7月前
|
Java
用Java编写一个代码实现计算器功能
【1月更文挑战第17天】用Java编写一个代码实现计算器功能
74 0
|
7月前
|
Java 程序员
java实现简单计算器(二)
java实现简单计算器(二)