初学JAVA之实现计算器

作者: 绿萝呀 | 来源:发表于2018-06-12 16:01 被阅读20次
    ManAndRunning

    这学期 Java 就快结课了,上机课最后布置了几个题,最后一题要求写一个计算器有点意思,记录一下。

    需求:

    设计一个在windows系统中可以使用的“计算器”窗口并实现(+、-,×,÷等)其功能。

    实现计算器,首先要有一个窗口:

    // 创建窗口
    final JFrame jf = new JFrame("计算器");
    // 流动布局,居中
    jf.setLayout(new FlowLayout(1,5,5)); 
    jf.setSize(293,251);
    // 
    jf.setLocationRelativeTo(null);
    jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    // 不可以改变大小
    jf.setResizable(false); 
    
    // 创建容器,存放显示数字框和 C 按钮
    JPanel panel1 = new JPanel();
    // 定义按钮面板,并设置为网格布局,4行4列,组件水平、垂直间距均为3
    JPanel panel2 = new JPanel(new GridLayout(4,4,1,1));
    

    有了窗口容器,就要往里面添加组件了。计算器首先要有一个文本框来显示数字,然后还要有数字按钮,加减乘除小数点等号,最后还要一个删除按钮 C 。

    然后一一添加即可。

    // 创建文本域,放置输入数据和结果
    JTextArea text = new JTextArea(1,13);
    // 设置字体
    text.setFont(new Font(null, Font.PLAIN, 20));
    // 设置大小
    text.setPreferredSize(new Dimension(190,28));
    // 不可编辑
    text.setEditable(false);
    panel1.add(text);
    
    // 创建一个清除按钮'C'
    JButton btnC = new JButton("C");
    btnC.setFont(new Font(null, Font.PLAIN, 20));
    btnC.setPreferredSize(new Dimension(55,28));
    panel1.add(btnC);
    
    // 按钮数组
    String btn_str[] = {"1","2","3","/","4","5","6","*","7","8","9","-","0",".","=","+"};
    
    JButton btn[] = new JButton[btn_str.length];
    for(int i = 0 ; i < btn_str.length ; i++ ){
        btn[i]=new JButton(btn_str[i]);
        btn[i].setFont(new Font(null, Font.PLAIN, 20));
        btn[i].setPreferredSize(new Dimension(70,42));
        panel2.add(btn[i]);
    }
            
    

    这里通过循环创建按钮数组。省时又省力,快乐好心情。

    到这里面板内容就做好了,接下来就需要为每个按钮添加功能。

    先来看数字按钮和运算符号按钮:

    // 按钮功能
    for(int i = 0 ; i < btn_str.length ; i++) {
        if(i != 14) {
        // 如果不是等于号
            int j = i;
            btn[i].addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    // 获取文本框内容
                    String textStr = text.getText();
                    // 如果有等号,清空文本框
                    if(textStr.indexOf("=") != -1) {
                    text.setText("");
                        }
                    // 获取按钮字符添加到文本框
                    String s = btn[j].getText();
                    text.append(s);
                }
                
            });
        }else {
        // 如果点击等于号
            btn[i].addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    try {  
                        // 获取文本框内容
                        String gongshi = text.getText();
                        // 计算公式
                        String jieguo = jse.eval(gongshi).toString();
                        
                        // 如果结果字符串过长,只显示等号和结果
                        if(jieguo.length() > 18) {
                            jieguo = jieguo.substring(jieguo.length()-16, jieguo.length());
                            text.setText("=");
                            text.append(jieguo);
                        }else {
                            text.append("=");
                            text.append(jieguo);
                        }
                   //如果出错
                   } catch (Exception t) {  
                        text.setText("");
                   }  
                }
            });
        }
    }{           }// 皮皮狗子写的!
    

    i = 14 的时候呢,这个按钮是 '=' 号,所有要区别对待一下。

    用户点击按钮的时候,获取到按钮上的字符,然后将该字符添加的文本框内,当用户点击等于号的时候进行计算。

    这里计算的时候用到了这个方法。

    String jieguo = jse.eval(gongshi).toString();
    

    通过下面这条语句引入这个方法。

    static ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");  
    

    通过这个方法可以自动将字符串类型的公式计算出结果,并且可以通过 try-catch 捕捉到错误。

    接下来实现删除键 C :

    // C 键 功能
    btnC.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            String textStr = text.getText();
            if(textStr.indexOf("=") != -1) {
                text.setText("");
            }else {
                textStr = textStr.substring(0,(textStr.length() - 1));
                text.setText(textStr);
            }
        }
        
    });
    

    最后将面板添加到窗口:

    // 把 面板容器 设置到 窗口
        // panel1 设置到顶部
    jf.getContentPane().add(panel1,BorderLayout.NORTH);
        // panel1 设置到底部
    jf.getContentPane().add(panel2,BorderLayout.CENTER);
    // 显示窗口,前面创建的信息都在内存中,通过 jf.setVisible(true) 把内存中的窗口显示在屏幕上。
    jf.setVisible(true);
    

    OK,一个简单的计算器就完成了!

    计算器

    2018/6/12

    相关文章

      网友评论

        本文标题:初学JAVA之实现计算器

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