Java 简单的计算器

来源:互联网 发布:淘宝网电视机 编辑:程序博客网 时间:2024/05/16 10:58

这是我发的第一个博客,也是我用Java写的第一个图形程序,它能进行简单的四则运算、开跟、倒数。


package com.UI.JavaUITest;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class Calculator02 extends JPanel {    private JTextField display; //显示器    private JPanel jPanel; //容器    private double result; //数据存储    private String lastCommand; //特殊命令    private boolean isStart; //执行条件//    构造函数    public Calculator02() {        setLayout(new BorderLayout()); //整个窗口布局为BroderLayout()        result = 0;        lastCommand = "=";        isStart = true;        display = new JTextField("0"); //建立一个显示器        display.setEnabled(false); //禁止用户输入,副作用是字体颜色变为浅灰色,可以考虑用按钮来当显示器,但按钮当显示器字体会居中显示,不符合习惯        display.setFont(new Font("微软雅黑", Font.BOLD, 20)); //设置显示器中字体格式        add(display, BorderLayout.NORTH); //将显示器放置窗口顶部        ActionListener insert = new InsertAction(); //数字按钮的事件处理机制对象        ActionListener command = new CommandAction(); //特殊按钮的事件处理机制对象        jPanel = new JPanel(new GridLayout(5, 4));//建立一个5行4列的容器,存放按钮//        定义一个addButton方法,用于设置、添加按钮        addButton("C", command);        addButton("CE", command);        addButton("sqrt", command);        addButton("1/x", command);        addButton("7", insert);        addButton("8", insert);        addButton("9", insert);        addButton("/", command);        addButton("4", insert);        addButton("5", insert);        addButton("6", insert);        addButton("*", command);        addButton("1", insert);        addButton("2", insert);        addButton("3", insert);        addButton("-", command);        addButton("0", insert);        addButton(".", insert);        addButton("=", command);        addButton("+", command);        add(jPanel, BorderLayout.CENTER);//将容器放置窗口中央    }//    添加、设置按钮的方法    public void addButton(String name, ActionListener listener) {        JButton jButton = new JButton(name);        jButton.addActionListener(listener); //实现按钮的事件处理        jButton.setFont(new Font("微软雅黑", Font.PLAIN, 20)); //设置按钮的字体格式        jPanel.add(jButton);//在容器中添加按钮    }//    数字按钮的事件处理,设置为内部私有类,防止其他类的非法访问    private class InsertAction implements ActionListener {        public void actionPerformed(ActionEvent event) {            String input = event.getActionCommand(); //接收按钮信息//            建立异常处理机制,防止用户非法输入导致的程序崩溃            try {//                判断数字输入是否为第一次,是则清空显示屏,输出按钮信息                if (isStart) {                    display.setText("");                    isStart = false;                }                display.setText(display.getText() + input); //将数据连接起来显示在显示屏上            }catch (NumberFormatException e) { //捕捉数字格式化异常,重置所有计算变量                display.setText("error");                result = 0;                lastCommand = "=";                isStart = true;            }catch (ArithmeticException e){ //捕捉算数异常,重置所有计算变量                display.setText("error");                result = 0;                lastCommand = "=";                isStart = true;            }        }    }//    特殊按钮的事件处理机制,设置为内部私有类,防止其他类的非法访问    private class CommandAction implements ActionListener{        public void actionPerformed(ActionEvent event) {            String command = event.getActionCommand(); //接收按钮信息//            建立异常处理机制,防止用户非法输入导致的程序崩溃            try { //                    添加“C”的清除当前数据功能                if (command.equals("C")) {                    display.setText("0");                    isStart = true;                }//                    添加“CE”的清除所有数据功能,重新初始化所有计算变量                else if (command.equals("CE")) {                    display.setText("0");                    result = 0;                    lastCommand = "=";                    isStart = true;                }//                判断首次输入是否为“-”,是则为负数                else if (isStart) {                    if (command.equals("-")) {                        display.setText("-");                        isStart = false;                    }                    else  lastCommand = command;                }                else{//                    定义calculatorDemo方法,用于计算数值                    calculatorDemo(Long.parseLong(display.getText()));//将在显示屏中显示的字符串转换为Long类型                    lastCommand = command;                    isStart = true;                }            }catch (NumberFormatException e){ //捕捉数字格式化异常                display.setText("error");                result = 0;                lastCommand = "=";                isStart = true;            }catch (ArithmeticException e){ //捕捉算数异常                display.setText("error");                result = 0;                lastCommand = "=";                isStart = true;            }        }    }//    计算方法    public void calculatorDemo(double num){//        因为break语法的不稳定性较高,在设计程序的时候,因尽量避免使用switch语法,所以在这里使用if语句代替switch,增加程序的稳定性        if (lastCommand.equals("+")) result += num;        else if (lastCommand.equals("-")) result -= num;        else if (lastCommand.equals("*")) result *= num;        else if (lastCommand.equals("/")) result /= num;        else if (lastCommand.equals("=")) result = num;        else if (lastCommand.equals("sqrt")) result = Math.sqrt(num);        else if (lastCommand.equals("1/x")) result = 1 / num;        display.setText("" + result);    }    public static void main(String[] args) {        JFrame jFrame = new JFrame("计算器"); //创建窗口        JPanel jPanel2 = new Calculator02();        jFrame.setContentPane(jPanel2);//窗口中的容器可见        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口即关闭程序        jFrame.pack();        jFrame.setLocationRelativeTo(jPanel2); //窗口出现在屏幕中央        jFrame.setVisible(true); //窗口可见    }}


原创粉丝点击