美文网首页
三十二、简易计算器

三十二、简易计算器

作者: joy_蓝蜘蛛 | 来源:发表于2018-06-07 15:04 被阅读476次

    上课视频:
    链接:https://pan.baidu.com/s/15lGZvyxUXtah6qBz-b8D8Q 密码:z2ek

    一、布局

    image.png

    代码:

    package com.joychen.mycomputer;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    
    public class ComputerWindow extends JFrame {
    
        private JTextField jTextFieldShowView = new JTextField("0");    // 这个是上 面的显示框
        private JPanel jPanelCenter = new JPanel();     //中间容器
        private JButton jButtonEq = new JButton("=");    //  下面的=号button
    
        private JButton jb1, jb2, jb3, jbc, jb4, jb5, jb6, jbAdd, jb7, jb8, jb9, jbd, jb0,
                jbPoint, jbChu, jbChen;      //16个按钮      在下面的addButton中实例化 并添加到    jPanelCenter容器中去
    
        private MyButtonClick myButtonClick = new MyButtonClick();     //这个是所有按键的  点击事件对象
    
    
        double num1 = 0;    //用于计算的第一个数
        double num2 = 0;     //用于计算的第二个数
        String operation = "";    //记录当前按的操作符     如  +   -   x   /
        double result = 0;        //  按  = 号后  会进行计算   得到的一结果存在这里
    
    
        boolean flag = false;     //   按了操作符后,再去按数字     会去清空一下 输入框中的内容,这里标记有没有清空过。清空过就不再清空第二次。
    
    
        public ComputerWindow() throws HeadlessException {
        }
    
        public ComputerWindow(String title) throws HeadlessException {
            super(title);
            setSize(250, 400);
            setLocation(200, 100);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗体关闭的同时关闭jvm
            setLayout(new BorderLayout());
            setResizable(false);   //窗口不可以拖动大小
            initCompent();
    
            setVisible(true);
    
        }
    
        /**
         * 初始化所有组件
         */
        private void initCompent() {
            jTextFieldShowView.setPreferredSize(new Dimension(250, 40));   //设置   显示框 的宽度
            jTextFieldShowView.setHorizontalAlignment(JTextField.RIGHT);     //  设置显示框的  字靠右显示
            jTextFieldShowView.setColumns(4);       //设置显示框 的列数。这里没有太大意义 可写可不写
            jTextFieldShowView.setEnabled(false);    //  设置 显示框不能用键盘 输入。只能通过代码改变值
            add(jTextFieldShowView, BorderLayout.NORTH);      //把  显示框添加到根容器的   北边
            jPanelCenter.setLayout(new GridLayout(4, 4, 2, 2));       //设置中间容器    为网格布局   4行  4列。
            addButton();     //这个函数  会把 上面那16个按钮  添加清台  jPanelCenter  中间容器中,并添加点击事件
            add(jPanelCenter, BorderLayout.CENTER);    // 把中间容器添加到   根容器的中部
            jButtonEq.setPreferredSize(new Dimension(250, 80));     // 设置  =号的 宽高
            Font font = new Font("宋体", 40, 40);    // 设置字体
            jButtonEq.setFont(font);  //  把上面的字体对象   设置到  =号按钮对象中
            jButtonEq.addMouseListener(myButtonClick);   //  给等号  按键添加点击事件
            add(jButtonEq, BorderLayout.SOUTH);    // 把等号按键   添加到   根容器的  南边
        }
    
        private void addButton() {
            //初使化按键
            jb1 = new JButton("1");
            jb2 = new JButton("2");
            jb3 = new JButton("3");
            jbc = new JButton("C");
            jb4 = new JButton("4");
            jb5 = new JButton("5");
            jb6 = new JButton("6");
            jbAdd = new JButton("+");
            jb7 = new JButton("7");
            jb8 = new JButton("8");
            jb9 = new JButton("9");
            jbd = new JButton("-");
            jb0 = new JButton("0");
            jbPoint = new JButton(".");
            jbChu = new JButton("/");
            jbChen = new JButton("x");
    
            //给按键  注册点击事件
            jb1.addMouseListener(myButtonClick);
            jb2.addMouseListener(myButtonClick);
            jb3.addMouseListener(myButtonClick);
            jb4.addMouseListener(myButtonClick);
            jb5.addMouseListener(myButtonClick);
            jb6.addMouseListener(myButtonClick);
            jb7.addMouseListener(myButtonClick);
            jb8.addMouseListener(myButtonClick);
            jb9.addMouseListener(myButtonClick);
            jb0.addMouseListener(myButtonClick);
            jbc.addMouseListener(myButtonClick);
            jbAdd.addMouseListener(myButtonClick);
            jbd.addMouseListener(myButtonClick);
            jbChen.addMouseListener(myButtonClick);
            jbChu.addMouseListener(myButtonClick);
            jbPoint.addMouseListener(myButtonClick);
    
    
            //把按钮添加到中间容器中
            jPanelCenter.add(jb1);
            jPanelCenter.add(jb2);
            jPanelCenter.add(jb3);
            jPanelCenter.add(jbc);
            jPanelCenter.add(jb4);
            jPanelCenter.add(jb5);
            jPanelCenter.add(jb6);
            jPanelCenter.add(jbAdd);
            jPanelCenter.add(jb7);
            jPanelCenter.add(jb8);
            jPanelCenter.add(jb9);
            jPanelCenter.add(jbd);
            jPanelCenter.add(jb0);
            jPanelCenter.add(jbPoint);
            jPanelCenter.add(jbChu);
            jPanelCenter.add(jbChen);
        }
    
    
        //点击事件的操作类
        class MyButtonClick implements MouseListener {
    
            @Override
            public void mouseClicked(MouseEvent e) {
                String value = ((JButton) e.getComponent()).getText();
                if ("C".equals(value)) {      //当按添除操作的时候
                    //清除所有数据
                    //1.输入框清除,值接是一个0.
                    jTextFieldShowView.setText("0");
    
                    //2.清除所有缓存
                    num1 = 0;
                    num2 = 0;
                    result = 0;
                    operation = "";
                    flag = false;
    
                } else if ("+".equals(value)) {  //当按+ 操作的时候
                    String old = jTextFieldShowView.getText();
                    num1 = Double.parseDouble(old);
                    num2 = Double.parseDouble(old);
                    operation = "+";
                    flag = true;
                } else if ("-".equals(value)) {//当按 - 操作的时候
                    String old = jTextFieldShowView.getText();
                    num1 = Double.parseDouble(old);
                    num2 = Double.parseDouble(old);
                    operation = "-";
                    flag = true;
                } else if ("x".equals(value)) {//当按x 操作的时候
    
                    String old = jTextFieldShowView.getText();
                    num1 = Double.parseDouble(old);
                    num2 = Double.parseDouble(old);
                    operation = "x";
                    flag = true;
    
                } else if ("/".equals(value)) {  //当按  / 操作的时候
    
                    String old = jTextFieldShowView.getText();
                    num1 = Double.parseDouble(old);
                    num2 = Double.parseDouble(old);
                    operation = "/";
                    flag = true;
                } else if ("=".equals(value)) {  //当按  = 操作的时候
                    if (operation.equals("+")){
                        result = num1 + num2;
                    }else if (operation.equals("-")){
                        result = num1 - num2;
                    }else if(operation.equals("x")){
                        result = num1* num2;
                    }else if (operation.equals("/")){
                        try {
                            result = num1 / num2;
                        }catch (Exception ex){
                            result = 0;
                        }
                    }
                    jTextFieldShowView.setText(result + "");
                    num1 = result;
                } else if (".".equals(value) ) {  //其它的数字
    
                    String old = jTextFieldShowView.getText();
                    if (!old.contains(".")) {
                        jTextFieldShowView.setText(old + value);
                    }else{
                        if (result >0&& operation!=""){
                            jTextFieldShowView.setText("0.");
                        }
    
    
                    }
    
                } else if ("0".equals(value) || "0.0".equals(value)) {
    
                } else {
    
                    String old = jTextFieldShowView.getText();
                    if ("0".equals(old)  || "0.0".equals(old)) {
                        jTextFieldShowView.setText(value);
                    } else if (old.length() >= 15) {
                        // 控制输入的长度
                    } else if (!operation.equals("")) {  //如果有操作符
                        if ( flag){
                            flag = false;
                            num2 = Double.parseDouble(value);
                            jTextFieldShowView.setText(value);
    
                        }else{
                            num2 = Double.parseDouble(old + value);
                            jTextFieldShowView.setText(old + value);
                        }
    
                    } else {
                        jTextFieldShowView.setText(old + value);
                    }
                }
    
    
                // JOptionPane.showConfirmDialog(null,((JButton)e.getComponent()).getText());
            }
    
            @Override
            public void mousePressed(MouseEvent e) {
    
            }
    
            @Override
            public void mouseReleased(MouseEvent e) {
    
            }
    
            @Override
            public void mouseEntered(MouseEvent e) {
    
            }
    
            @Override
            public void mouseExited(MouseEvent e) {
    
            }
        }
    
    
    }
    
    

    相关文章

      网友评论

          本文标题:三十二、简易计算器

          本文链接:https://www.haomeiwen.com/subject/mcegsftx.html