实现计算器的程序

来源:互联网 发布:常用算法面试 编辑:程序博客网 时间:2024/05/18 01:56

1. 主要学习内容

本周的java基础课程主要学习了如何完成界面的实现,使用NetBeans作为开发工具,在画界面这块确实方便省事了不少,直接拖控件即可以实现。为了深入学习空间的事件相应,我们做了一个计算器的实现小程序。

2.事件及其处理

2.1监听接口

实现这个小程序主要用到的监听接口有ActionListener、MouseListener。
但是我们也可以学习一下其他常用到的监听接口的事件的处理方法:

监听接口 事件处理方法 功能说明 ActionListener actionPerformed(ActionEvent e) 行为处理 AdjustmentListener adjustmentValueChanged(AdjustmentEvent e) 调节值改变 ItemListener itemStateChanged(ItemEvent e) 选项值状态改变 MouseListener mouseClicked(MouseEvent e) 鼠标点击 mouseEntered(MouseEvent e) 鼠标进入 mouseExited(MouseEvent e) 鼠标退出 mousePressed(MouseEvent e) 鼠标按下 mouseReleased(MouseEvent e) 鼠标松开

2.2事件处理的要点

第一创建监听类,并在事件处理方法中编写事件处理代码;

监听类是一个扩展监听接口的类,它可以扩展一个或者多个监听接口,事件处理方法是监听接口中已经定义好的相应事件处理方法,在创建监听类时需要对这些事件的处理方法进行重写,将事件的处理的代码放入到相应的方法中。

第二创建监听对象;

监听对象是监听类的一个实例对象,具有监听功能。

第三利用组件中相应添加事件监听的方法addXXXListener()将监听对象注册到组件上;
//添加事件的监听方法到组件上jButton4.addActionListener(new java.awt.event.ActionListener() {//创建监听对象  public void actionPerformed(java.awt.event.ActionEvent evt) {  //匿名内部类中写事件的处理方法                jButton10ActionPerformed(evt);            }        });

3.最终实现

发现可以使用ScriptEngine中的JavaScript中的eval(String e)方法直接计算表达式。那么只需要保证输入的表达式正确即可。
所以在添加小数点时需要对小数点的添加情况进行判定。

 public void pointIsPressed(java.awt.event.ActionEvent evt){        //小数点被按下时,需要判断一下小数点前的情况              String temp =jTextPane1.getText().trim();        for(int i =temp.length()-1;i >=0;i --){            //一种是小数点前是操作符或为空,那么自动补零            if(i == temp.length()-1 && (isOperator(temp.charAt(i)) || jTextPane1.getText().trim().equals(""))) {                 jTextPane1.setText(jTextPane1.getText().trim()+"0.");                 break;            }             else {//二种先遇到操作符,那么直接加上小数点                if(isOperator(temp.charAt(i))){                   jTextPane1.setText(jTextPane1.getText().trim()+".");                    break;                }                //遇到小数点,那么跳出循环,提示错误                if(temp.charAt(i)== '.'){                    JOptionPane.showMessageDialog(null, "您此次输入有误,请重新输入!");                    break;                }                if(i == 0 && temp.charAt(i)!='.') jTextPane1.setText(jTextPane1.getText().trim()+".");             }        }    }

核心代码:

public void equalPressed(java.awt.event.ActionEvent evt){        try{            String str = jTextPane1.getText();            ScriptEngineManager manager = new ScriptEngineManager();            ScriptEngine se = manager.getEngineByName("js");            Double result = (Double)se.eval(str);            jTextPane1.setText(result.toString());        }catch(ScriptException ex){            Logger.getLogger((Calculator.class.getName()), log(Level.SEVERE,null,ex));            jTextPane1.setText("表达式错误!");        }        }

4.

刚刚接触java不久,需要学习的地方还有很多,加油捏~

0 0