使用Swing编写win7简易计算器2——输入输出处理

来源:互联网 发布:app源码如何使用教程 编辑:程序博客网 时间:2024/06/06 07:11

        编好页面之后,第二天就进入事件处理了。Swing中的事件处理是通过实现ActionListener接口来实现的。因此Calculator的类声明是这样的:

public classCalculator extends JFrame implements ActionListener

        继承ActionListener必须实现接口的actionPerformed(ActionEvent e)方法,该方法用于教导计算机如何处理监听器监听的控件点击后的操作。计算器上面的28个按钮的处理全部都在这个类里实现,这样会使得整个方法变得十分臃肿,因此我根据这些按钮的不同,将这些按钮分为四类:

        输入输出按钮:这些按钮负责对计算器显示区的数字进行输入输出处理,而不会进行任何运算,这些按钮包括数字键0-9、←、CE、C和.,因为C的作用涉及到对计算器内存的处理,因此将放到后面实现。

        单目运算符:这些按钮只需要一个变量即可完成运算,包括√、1/x和±。

        双目运算符:这些按钮需要两个变量才可完成运算,包括+、-、*、/和%。

        M运算符:计算器提供专门的存储运算,可以将数据先存入计算器的存储器中,以后调用存储器的数据便可进行运算。这些符号就是第一排的MC、MR、MS、M+和M-。

        除此之外还有=号,这个符号与多种运算符的计算有关,但与双目运算符的联系较为紧密,我将它也归入双目运算符一并处理了。

        接下来的四天我就分别对四种不同类型的按钮进行处理了。今天先进行的是输入输出按钮的处理。

        先说一下各按钮的功能:

        1. 数字键0-9:当显示区显示的数不是0时,则将点击按钮上的数字加到显示区后面。如果显示区显示的是运算结果时,则无论点哪个数字键都会重新显示该数字。

        2. .号:显示小数点,如果显示区已有小数点,则点击不会有反应。

        3. CE:将显示区清零。与C的区别是该按钮不会将存储区清空。

        4. ←:退格,将显示区显示的数的最右边数字删去,如果为0则不作动作。另外,如果显示区显示的是计算结果,则2和4都不会有响应。

        这13个按钮实现起来并不困难。考虑到按钮众多,而每个按钮的业务逻辑比较简单,我在Button类中新添加了NumAction(String text, int index)方法,代码如下:

        publicstatic String numberAction(String text, int index) {

               if (Operation.isResult)

                  return Operation.refresh(text, index);

               switch (index) {

               case Button.BACKSPACE:

                  return text.length() == 1 ?"0" : text.substring(0,

                         text.length() - 1);

               case Button.C:

                  return "0";

               case Button.ONE:

                  return "0".equals(text) ?"1" : text + "1";

               case Button.TWO:

                  return "0".equals(text) ?"2" : text + "2";

              case Button.THREE:

                  return "0".equals(text) ?"3" : text + "3";

               case Button.FOUR:

                  return "0".equals(text) ?"4" : text + "4";

              case Button.FIVE:

                 return "0".equals(text) ?"5" : text + "5";

              case Button.SIX:

                  return "0".equals(text) ?"6" : text + "6";

              case Button.SEVEN:

                  return "0".equals(text) ?"7" : text + "7";

               case Button.EIGHT:

                  return "0".equals(text) ?"8" : text + "8";

               case Button.NINE:

                  return "0".equals(text) ?"9" : text + "9";

               case Button.ZERO:

                  return "0".equals(text) ?"0" : text + "0";

               case Button.DOT:

                  return text.contains(".") ?text : text + ".";

               default:

                  return "";

               }

           }

        这一段代码显示,如果是输入输出按钮则函数返回显示区域应输出的内容,如果不是按的这些按钮,则输出空字符串

        而在Calculator的actionPerformed(ActionEvent e)中,使用e.getResource()可以获取按钮的对象,例如按下9的按钮,则会返回按钮9的JButton对象,然后使用JTextField的getText()方法和setText()方法可以获取和设置显示区的文本。核心代码如下:

               String text = bts.jt.getText();

              String temp;

               int index;

              //获取按钮的对象

               for (index = 0; index <bts.jbtn.length; index++) {

                  if (e.getSource() == bts.jbtn[index])

                      break;

               }

 

               temp = Number.numberAction(text, index);

                  if (!"".equals(temp)) {

                      text = temp;

                  }

               }

               bts.jt.setText(text);

              测试通过,于是输入输出部分就此完成。

原创粉丝点击