计算器

这篇博客详细介绍了如何运用Java语言和NetBeans工具设计一个简易计算器的过程,包括界面设计、功能实现(如数字输入、运算符处理、等号功能、回退和清空功能)、界面美化以及附加的鼠标交互效果。博主在实践中学习了StringBuffer类的使用和其他相关知识,虽然遇到挑战,但收获颇丰。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算器


      运用Java语言和NetBeans工具设计一个简易的计算器,计算器看似简单,其中各种功能的实现需要涉及很多知识点,下面我来简单的阐述一下设计计算器的步骤以及遇到的一些问题。

一、设计计算器的步骤

  1、打开NetBeans,文件-新建-在类别中选择Java-下一步-写上项目名(caculator)选择项目位置-点击完成。

  2、选中caculator包右击,新建-JFrame窗体,在设计界面设计计算器的界面,步骤如下:先放入一个拆分窗格,然后依次放入一个文本字段和十八个按钮,布局好后,分别选中按钮,右击设置按钮的变量名称和按钮上的文本,设置完如下图。


3、实现计算器各种功能的代码

在JFrame下先创建一个setNum方法,然后依次右击按钮-事件-Mouse-mouseReleased,添加鼠标的释放事件的方法,并在各个按钮的释放事件方法中使用setNum()调用JFrame中的setNum()方法。即可实现点击按钮相应的数字能进入JTextField文本域中。

setNum()方法的代码如下:

//创建setNum方法

        public void setNum(String str){

            //获得显示文本内容保存到strText

            String strText=jTextField1.getText();  

             //如果文本内容是0,那么改为str,否则追加

            if(strText.equals("0")){

               jTextField1.setText(str);

            }else{   //追加

                //使用构造方法初始化StringBuffer,并赋值strText

                StringBuffer strBuf=new StringBuffer(strText);

                //追加str到当前StringBuffer对象(strText)的末尾

                strBuf.append(str);  //追加str

                //重新设置文本内容为strBuf

                jTextField1.setText(strBuf.toString());

               // jTextField1.setText(strText+str);

            }

        }    

上面的功能实现后,设置等于的MouseReleased事件的方法,实现点击等于时,将计算结果显示在文本域中。代码如下:

 //等于

    private void dengyuMouseReleased(java.awt.event.MouseEvent evt) {                                     

        // TODO add your handling code here:

        /*ScriptEngineManager 为 ScriptEngine 类实现一个发现和实例化机制,

          还维护一个键/值对集合来存储所有 Manager 创建的引擎所共享的状态。

         */

        ScriptEngineManager manager=new   ScriptEngineManager(); 

        //查找并创建一个给定名称的 ScriptEngine

        ScriptEngine se=manager.getEngineByName("js");

        Double result=null;

        try {

             result=(Double) se.eval("("+jTextField1.getText()+")*1.0");

        } catch (ScriptException ex) {

            Logger.getLogger(JFrame.class.getName()).log(Level.SEVERE, null, ex);

        }

            jTextField1.setText(result.toString());

    }                                   

4、实现回退的功能,设置回退按钮的MouseReleased事件的方法,该按钮实现当点击该按钮时,文本域中删除一个字符。

代码如下://箭头

    private void jiantouMouseReleased(java.awt.event.MouseEvent evt) {                                      

        // TODO add your handling code here:

        //获得显示文本内容保存到strText

        String strText=jTextField1.getText();

        //判断strText的长度

        if(strText.length()>1){

            StringBuffer strBuf=new StringBuffer(strText);

            //删除指定位置的字符,然后将剩余的内容形成新的字符串。

            strBuf.deleteCharAt(strBuf.length()-1);

            jTextField1.setText(strBuf.toString());

        }else{  

            jTextField1.setText("0");

        }

}    

5、实现清空的功能,设置清空按钮的MouseReleased事件的方法,该按钮实现当点击该按钮时,文本域中的字符被清空。

代码如下:

 //清空

    private void qingkongMouseReleased(java.awt.event.MouseEvent evt) {                                       

        // TODO add your handling code here:

        jTextField1.setText("0"); 

}           

6、规范运算符,在JFrame下先创建一个setYSF()方法,该方法实现当点击一个运算符时,发现点错,想点击正确的运算符能直接实现运算符的切换功能。代码如下:

    //规范运算符

        public void setYSF(String str){

            //取出当前显示的内容放到字符串变量strText中 

            String strText=jTextField1.getText();

            //判断strText中字符串的最右边一位是否为运算符

         /* 如果(最右边是运算符){

              //替换strText最右边的运算符为当前按键str

              //strText放回文本框

            }否则{

                //strText追加当前的str

                //strText放回

            }*/

            int lastRight=strText.length()-1;  //当前字符串的长度-1

            char ch=strText.charAt(lastRight); //ch存放最右边的一个字符

            if(ch=='+'||ch=='-'|| ch=='*' ||ch=='/'){

                //替换strText最右边的运算符为当前按键str,比如"1234","123"

                String strResult=strText.substring(0,lastRight)+str;

                //strText,strResult放回文本框

                jTextField1.setText(strResult);

            }else{

                 //strText追加当前的str

                //strText放回

                jTextField1.setText(strText+str);

            }

        }    

7、美化计算器的界面。为了计算器的外观更美观, 可以给计算器添加背景图片。步骤如下:

 在JFrame-导航器中,选中JFrame,右击 从组件面板上添加-Swing容器-分层窗格、面板1和面板2。将计算器中的组件放入面板1中,将图片放入面板2中。在面板2中添加jLabel,选中jLabel右击属性,找到icon-点击-弹出如下的界面    

     选择外部图像,将提前找好的图片导入到项目中,然后选择项目内的图像,选中图像。回到设计界面,分别设置分层窗体、面板1、面板2和图片的大小。设置完成后,运行项目,如下图:

8、附加功能:在此基础上,为了使鼠标经过按钮时变色,分别给按钮添加了MouseExited和MouseEntered的事件,在JFrame下先创建 mouseEnter和mouseExited方法,鼠标进入按钮和离开按钮时分别调用这两个方法,代码如下:

  public void mouseEnter(int color){

             JButton b[]=new JButton[]

            {zero,one,two,three,four,five,six,serven,eight,nine,point,jia,jian,cheng,chu,jiantou,qingkong,dengyu};

            for(int i = 0;i<b.length;i++){

                  b[i].setBackground(Color.YELLOW);

             }

             //one.setBackground(Color.orange);

        }

        public void mouseExited(int color){

            JButton b[]=new JButton[]

            {zero,one,two,three,four,five,six,serven,eight,nine,point,jia,jian,cheng,chu,jiantou,qingkong,dengyu};

            for(int i = 0;i<b.length;i++){

                 b[i].setBackground(Color.getColor(""));

             } 

      // one.setBackground(Color.getColor(""));

        }

    该方法实现实现了当鼠标进入其中任何一个按钮时,所有的按钮变色,当离开按钮时,按钮恢复为原来的颜色。

二、问题总结

   在开始设计计算器的时候,认为计算器很简单,但当实际操作时,会发现很多问题。比如在一开始的界面设计时,按钮的位置和大小的调整,这个地方要很有耐心的调整按钮到合适的位置。在实现计算器的功能时,学到了很多新的知识,比如StringBuffer类的使用:StringBuffer对象的初始化

StringBuffer对象的初始化不像String类的初始化一样,Java提供的有特殊的语法,而通常情况下一般使用构造方法进行初始化。

例如:StringBuffer s = new StringBuffer();

这样初始化出的StringBuffer对象是一个空的对象。

如果需要创建带有内容的StringBuffer对象,则可以使用:

  StringBuffer s = new StringBuffer(“abc”);

这样初始化出的StringBuffer对象的内容就是字符串”abc”。

需要注意的是,StringBuffer和String属于不同的类型,也不能直接进行强制类型转换,下面的代码都是错误的:

StringBuffer s = “abc”;  //赋值类型不匹配

StringBuffer s = (StringBuffer)”abc”; //不存在继承关系,无法进行强转

StringBuffer对象和String对象之间的互转的代码如下:

String s = “abc”;

StringBuffer sb1 = new StringBuffer(“123”);

StringBuffer sb2 = new StringBuffer(s);   //String转换为StringBuffer

String s1 = sb1.toString();   //StringBuffer转换为String

       总之,在设计过程中遇到了很多问题也学到了一些类和方法的使用,我觉得这对以后的学习会有很大的帮助。当然,我会再接再厉,努力掌握好基础知识,才能在以后的项目设计中更轻松。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值