实现计算器的程序

1. 主要学习内容

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

2.事件及其处理

2.1监听接口

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

监听接口事件处理方法功能说明
ActionListeneractionPerformed(ActionEvent e)行为处理
AdjustmentListeneradjustmentValueChanged(AdjustmentEvent e)调节值改变
ItemListeneritemStateChanged(ItemEvent e)选项值状态改变
MouseListenermouseClicked(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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值