使用Swing编写win7简易计算器5——M运算符

        最后一部分的按钮就是M运算符了,M运算符全部在按钮的第一排。这些操作均涉及到计算器的存储器操作,于是我新建一个继承Operation的Moperation类来处理这些运算符的操作。

       照例先介绍一下各M运算符的操作:

       MC:清空存储器的内容,显示区存在的M标志会消失。

       MR:读取存储器的内容到显示区。

       MS:将显示区的内容写入存储器中。显示区将出现M标志。

       M+、M-:对存储器的数值进行加法(减法)运算。如果存储器记录了数值(显示区出现M标志),则点击M+(M-)后会将存储器中的数值加上(减去)显示区的数值;否则功能相当于MS。

       我在Moperation类中设置了memory的double变量和isMemoryFilled的boolean变量,以记录存储器是否存储了数值,以及存储器的数值大小。

       这里需要讲讲如何在JtextField上添加M标志。首先先创建一个文本为M的JLabel,然后就考虑如何将JLabel放到JTextField的上面。一开始我是在显示区的面板上用了setComponentZOrder()函数来设置控件的上下层关系,但是这样做的话,当显示区的文本发生变化时,M标志就会被覆盖掉。最后才发现可以直接使用add()方法将M标志加到显示区上,再用setBounds调好位置和大小即可。注意,这里不能设置布局。效果如下图所示:


       做好这个之后剩下的处理就简单了,代码如下:

       publicstatic String MOperationAction(String text, int index) {

              switch (index) {

              case Button.MR:

                 return isMemoryFilled ? resultFormat(memory): "0";

              case Button.MS:

                 if (!text.equals("0")) {

                     memory_sign.setVisible(true);

                     memory = Double.parseDouble(text);

                     isMemoryFilled = true;

                     isResult = true;

                 } else {

                     memory = Double.parseDouble(text);

                 }

                 return text;

              case Button.MC:

                 memory_sign.setVisible(false);

                 isMemoryFilled = false;

                 return text;

              case Button.MPLUS:

                 if (!text.equals("0")) {

                     memory_sign.setVisible(true);

                     memory = isMemoryFilled ? memory +Double.parseDouble(text)

                            : Double.parseDouble(text);

                     isMemoryFilled = true;

                     isResult = true;

                 }

                 return text;

              case Button.MMINUS:

                 if (!text.equals("0")) {

                     memory_sign.setVisible(true);

                     memory = isMemoryFilled ? memory -Double.parseDouble(text)

                            : Double.parseDouble(text);

                     isMemoryFilled = true;

                     isResult = true;

                 }

                 return text;

              default:

                 return "";

              }

          }

       M运算符的处理也到此完成。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值