当前位置: 移动技术网 > IT编程>开发语言>Java > java模仿windows计算器示例

java模仿windows计算器示例

2019年07月22日  | 移动技术网IT编程  | 我要评论

这个计算器的界面模仿windows自带的简易计算器,包括交互界面和和对各种输入的响应。目前尚未实现菜单栏和记忆类按钮的功能

复制代码 代码如下:

import java.awt.color;
import java.awt.container;
import java.awt.gridlayout;
import java.awt.insets;
import java.awt.event.actionevent;
import java.awt.event.actionlistener;

import javax.swing.jframe;
import javax.swing.jbutton;
import javax.swing.jmenu;
import javax.swing.jmenubar;
import javax.swing.jmenuitem;
import javax.swing.jpanel;
import javax.swing.jtextfield;
import javax.swing.swingconstants;
import javax.swing.plaf.basic.basicborders;

public class calculator extends jframe {
 private static final long serialversionuid = 1l;
 container c = getcontentpane();
 stringbuilder number1 = new stringbuilder("");// 储存第1个数字字符串
 stringbuilder number2 = new stringbuilder("");// 储存第2个数字字符串
 stringbuilder operator = new stringbuilder("");// 储存运算符
 stringbuilder result = new stringbuilder("");// 储存运算结果
 jtextfield numbershow = new jtextfield("0.");// 数字显示区域,初始显示为"0."

 public static void main(string[] args) {// 主方法
  calculator c1 = new calculator();
  c1.setvisible(true);
 }

 public calculator() {// 计算器构造方法
  settitle("计算器");
  setbounds(100, 100, 260, 245);
  setresizable(false);
  setlayout(null);
  setdefaultcloseoperation(jframe.exit_on_close);
  createmenubar();// 创建菜单栏
  createnumbershow();// 创建数字显示区域
  creatememoshow();// 创建记忆显示
  createclearbuttons();// 创建backspace,ce,c等三个按钮
  createbuttonarea();// 创建数字按钮区域
 }

 private void createmenubar() {// 创建菜单栏的方法
  jmenubar menubar = new jmenubar();
  setjmenubar(menubar);
  jmenu menu1 = new jmenu("编辑");
  jmenu menu2 = new jmenu("查看");
  jmenu menu3 = new jmenu("帮助");
  menubar.add(menu1);
  menubar.add(menu2);
  menubar.add(menu3);
  jmenuitem menu1item1 = new jmenuitem("复制");
  jmenuitem menu1item2 = new jmenuitem("粘贴");
  jmenuitem menu2item1 = new jmenuitem("标准型");
  jmenuitem menu2item2 = new jmenuitem("科学型");
  jmenuitem menu2item3 = new jmenuitem("科学分组");
  jmenuitem menu3item1 = new jmenuitem("帮助主题");
  jmenuitem menu3item2 = new jmenuitem("关于计算器");
  menu1.add(menu1item1);
  menu1.add(menu1item2);
  menu2.add(menu2item1);
  menu2.add(menu2item2);
  menu2.add(menu2item3);
  menu3.add(menu3item1);
  menu3.add(menu3item2);
 }

 private void createnumbershow() {// 创建数字显示区域的方法
  numbershow.sethorizontalalignment(jtextfield.right);
  numbershow.setbounds(5, 0, 245, 22);
  numbershow.setenabled(false);
  numbershow.setdisabledtextcolor(color.black);
  c.add(numbershow);
 }

 private void creatememoshow() {// 创建记忆显示的方法
  jtextfield memoshow = new jtextfield();
  memoshow.seteditable(false);
  memoshow.setbounds(10, 30, 28, 22);
  memoshow.setborder(new basicborders.fieldborder(color.black,
    color.black, color.white, color.white));
  c.add(memoshow);
 }

 private void createclearbuttons() {// 创建backspace,ce,c等三个按钮的方法
  jbutton[] clearbutton = new jbutton[3];
  string[] clearbuttontext = { "backspace", "ce", "c" };
  for (int i = 0; i < 3; i++) {
   clearbutton[i] = new jbutton();
   clearbutton[i].settext(clearbuttontext[i]);
   clearbutton[i].sethorizontalalignment(swingconstants.center);
   clearbutton[i].setmargin(new insets(0, 0, 0, 0));
   clearbutton[i].setfont(new java.awt.font("arial", 0, 9));
   clearbutton[i].setforeground(color.blue);
   clearbutton[i].setbounds(48 + i * 68, 30, 63, 22);
   clearbutton[i].setforeground(color.red);
   c.add(clearbutton[i]);
  }

  clearbutton[0].addactionlistener(new actionlistener() {// 为backspace按钮添加监听器
     @override
     public void actionperformed(actionevent e) {
      if (number1.tostring().equals("")) {// 如果未做任何输入
       shownumber(numbershow, number1);// 显示number1
      } else if (operator.tostring().equals("")) {// 如果只输入了number1
       number1.deletecharat(number1.tostring().length() - 1);// 将number1的最后一个字符去掉
       shownumber(numbershow, number1);// 显示number1
      } else if (number2.tostring().equals("")) {// 如果只输入了number1和operator
       shownumber(numbershow, number1);// 不作任何处理,显示number1
      } else {// 如果输入了number1、operator、number2
       number2.deletecharat(number2.tostring().length() - 1);// 将number2的最后一个字符去掉
       shownumber(numbershow, number2);// 显示number2
      }
     }
    });

  clearbutton[1].addactionlistener(new actionlistener() {// 为ce按钮添加监听器
     @override
     public void actionperformed(actionevent e) {
      if (number1.tostring().equals("")) {// 如果未做任何输入
       shownumber(numbershow, number1);// 显示number1
      } else if (operator.tostring().equals("")) {// 如果只输入了number1
       number1.setlength(0);// 清除number1
       shownumber(numbershow, number1);// 显示number1
      } else if (number2.tostring().equals("")) {// 如果输入了number1和operator
       shownumber(numbershow, number2);// 不作任何处理,显示number2
      } else {// 如果输入了number1、operator、number2
       number2.setlength(0);// 清除number2
       shownumber(numbershow, number2);// 显示number2
      }
     }
    });

  clearbutton[2].addactionlistener(new actionlistener() {// 为c按钮添加监听器
     @override
     public void actionperformed(actionevent e) {// 将所有储存清零
      number1.setlength(0);
      number2.setlength(0);
      operator.setlength(0);
      numbershow.settext("0.");
      result.setlength(0);
     }
    });
 }

 private void createbuttonarea() {// 创建数字按钮区域的方法
  jpanel buttonarea = new jpanel();
  buttonarea.setbounds(5, 55, 245, 125);
  buttonarea.setlayout(new gridlayout(4, 6, 5, 5));
  c.add(buttonarea);

  jbutton[] numberbutton = new jbutton[24];
  string[] numberbuttontext = { "mc", "7", "8", "9", "/", "sqrt", "mr",
    "4", "5", "6", "*", "%", "ms", "1", "2", "3", "-", "1/x", "m+",
    "0", "+/-", ".", "+", "=" };
  for (int i = 0; i < 24; i++) {// 使用循环为这24个按钮添加标识
   numberbutton[i] = new jbutton(numberbuttontext[i]);
   buttonarea.add(numberbutton[i]);
   if (i % 6 == 0 || i % 6 == 4 || i == 23) {// 操作符按钮设置为红色
    numberbutton[i].sethorizontalalignment(swingconstants.center);
    numberbutton[i].setmargin(new insets(0, 0, 0, 0));
    numberbutton[i].setfont(new java.awt.font("arial", 0, 9));
    numberbutton[i].setforeground(color.red);
   } else {// 其它设置为蓝色
    numberbutton[i].sethorizontalalignment(swingconstants.center);
    numberbutton[i].setmargin(new insets(0, 0, 0, 0));
    numberbutton[i].setfont(new java.awt.font("arial", 0, 9));
    numberbutton[i].setforeground(color.blue);
   }
  }

  int[] numbers = { 19, 13, 14, 15, 7, 8, 9, 1, 2, 3 };// 该数组中的数字分别代表0-9等数字在numberbuttontext数组中序号
  for (int i = 0; i <= 9; i++) { // 使用循环为这0-9这十个数字按钮添加监听器
   final string str = string.valueof(i);
   numberbutton[numbers[i]].addactionlistener(new actionlistener() {// 为0-9按钮添加监听器
      @override
      public void actionperformed(actionevent e) {
       if (operator.tostring().equals("")) {// 没有输入operator之前
        add(number1, str); // 只设置number1的值
        shownumber(numbershow, number1);// 只显示number1的值
       } else {// 输入operator之后
        add(number2, str);// 只设置number2的值
        shownumber(numbershow, number2);// 只显示number2的值
       }
      }
     });
  }

  numberbutton[20].addactionlistener(new actionlistener() { // 为"+/-"按钮添加监听器
     @override
     public void actionperformed(actionevent e) {
      if (operator.tostring().equals("")) {// 没有输入operator之前
       add(number1, "+/-");// 只设置number1的值
       shownumber(numbershow, number1);// 只显示number1的值
      } else {// 输入operator之后
       add(number2, "+/-");// 只设置number2的值
       shownumber(numbershow, number2);// 只显示number2的值
      }
     }
    });

  numberbutton[21].addactionlistener(new actionlistener() { // 为"."按钮添加监听器
     @override
     public void actionperformed(actionevent e) {
      if (operator.tostring().equals("")) {// 在输入operator之前,只显示number1的值
       add(number1, ".");
       shownumber(numbershow, number1);
      } else {// 在输入operator之后,只显示number2的值
       add(number2, ".");
       shownumber(numbershow, number2);
      }
     }
    });

  numberbutton[22].addactionlistener(new actionlistener() { // 为"+"按钮添加监听器
     @override
     public void actionperformed(actionevent e) {
      operator.setlength(0);
      operator.append("+");
     }
    });

  numberbutton[16].addactionlistener(new actionlistener() { // 为"-"按钮添加监听器
     @override
     public void actionperformed(actionevent e) {
      operator.setlength(0);
      operator.append("-");
     }
    });

  numberbutton[10].addactionlistener(new actionlistener() { // 为"*"按钮添加监听器
     @override
     public void actionperformed(actionevent e) {
      operator.setlength(0);
      operator.append("*");
     }
    });

  numberbutton[4].addactionlistener(new actionlistener() { // 为"/"按钮添加监听器
     @override
     public void actionperformed(actionevent e) {
      operator.setlength(0);
      operator.append("/");
     }
    });

  numberbutton[23].addactionlistener(new actionlistener() { // 为"="按钮添加监听器
     @override
     public void actionperformed(actionevent e) {
      if (number1.tostring().equals("")) {// 当number1为空时
       shownumber(numbershow, number1);
      } else if (operator.tostring().equals("")) {// 当number1不为空,而operator为空时
       shownumber(numbershow, number1);
      } else if (number2.tostring().equals("")) {// 当number1、operator均不为空,而number2为空时
       switch (operator.tostring()) {
       case ("+"): {
        number2.append(number1.tostring());
        double d = double.parsedouble(number1
          .tostring())
          + double.parsedouble(number2.tostring());
        result.setlength(0);
        result.append(d);
        shownumber(numbershow, result);
        number1.setlength(0);
        number1.append(d);
       }
        break;
       case ("-"): {
        number2.append(number1.tostring());
        double d = double.parsedouble(number1
          .tostring())
          - double.parsedouble(number2.tostring());
        result.setlength(0);
        result.append(d);
        shownumber(numbershow, result);
        number1.setlength(0);
        number1.append(d);
       }
        break;
       case ("*"): {
        number2.append(number1.tostring());
        double d = double.parsedouble(number1
          .tostring())
          * double.parsedouble(number2.tostring());
        result.setlength(0);
        result.append(d);
        shownumber(numbershow, result);
        number1.setlength(0);
        number1.append(d);
       }
        break;
       case ("/"): {
        number2.append(number1.tostring());
        double d = double.parsedouble(number1
          .tostring())
          / double.parsedouble(number2.tostring());
        result.setlength(0);
        result.append(d);
        shownumber(numbershow, result);
        number1.setlength(0);
        number1.append(d);
       }
        break;
       }
      } else {// 当number1、operator、number2均不为空时
       switch (operator.tostring()) {
       case ("+"): {
        double d = double.parsedouble(number1
          .tostring())
          + double.parsedouble(number2.tostring());
        result.setlength(0);
        result.append(d);
        shownumber(numbershow, result);
        number1.setlength(0);
        number1.append(d);
       }
        break;
       case ("-"): {
        double d = double.parsedouble(number1
          .tostring())
          - double.parsedouble(number2.tostring());
        result.setlength(0);
        result.append(d);
        shownumber(numbershow, result);
        number1.setlength(0);
        number1.append(d);
       }
        break;
       case ("*"): {
        double d = double.parsedouble(number1
          .tostring())
          * double.parsedouble(number2.tostring());
        result.setlength(0);
        result.append(d);
        shownumber(numbershow, result);
        number1.setlength(0);
        number1.append(d);
       }
        break;
       case ("/"): {
        double d = double.parsedouble(number1
          .tostring())
          / double.parsedouble(number2.tostring());
        result.setlength(0);
        result.append(d);
        shownumber(numbershow, result);
        number1.setlength(0);
        number1.append(d);
       }
        break;
       }
      }
     }
    });

  numberbutton[17].addactionlistener(new actionlistener() { // 为"1/x"按钮添加监听器
     @override
     public void actionperformed(actionevent e) {
      if (number1.tostring().equals("")) {// 没有输入number1时
       numbershow.settext("除数不能为零");
      } else if (operator.tostring().equals("")) {// 输入了number1,但没有输入operator
       if (double.parsedouble(number1.tostring()) == 0) {// 如果number1的值为零
        numbershow.settext("除数不能为零");
       } else {// 如果number1的值不为零
        double d = 1 / (double.parsedouble(number1
          .tostring()));
        number1.setlength(0);
        number1.append(d);// 将number1的值开放并存储
        shownumber(numbershow, number1);
       }
      } else if (number2.tostring().equals("")) {// 输入了number1、operator,但没有输入number2
       double d = 1 / (double.parsedouble(number1
         .tostring()));
       number2.append(d);// 将number1的值开放并存储
       shownumber(numbershow, number2);
      } else {// 输入了number1、operator,number2
       double d = 1 / (double.parsedouble(number2
         .tostring()));
       number2.setlength(0);
       number2.append(d);// 将number2的值开放并存储
       shownumber(numbershow, number2);
      }
     }
    });

  numberbutton[11].addactionlistener(new actionlistener() { // 为"%"按钮添加监听器
     @override
     public void actionperformed(actionevent e) {
      // 暂时空缺
     }
    });

  numberbutton[5].addactionlistener(new actionlistener() { // 为"sqrt"按钮添加监听器
     @override
     public void actionperformed(actionevent e) {
      if (number1.tostring().equals("")) {// 没有输入number1时
       shownumber(numbershow, number1);
      } else if (operator.tostring().equals("")) {// 输入了number1,但没有输入operator
       if (double.parsedouble(number1.tostring()) < 0) {// number1小于0
        numbershow.settext("函数输入无效");
       } else {// number1大于0
        double d = math.sqrt(double.parsedouble(number1
          .tostring()));
        number1.setlength(0);
        number1.append(d);// 将number1的值开放并存储
        shownumber(numbershow, number1);
       }
      } else if (number2.tostring().equals("")) {// 输入了number1、operator,但没有输入number2
       double d = math.sqrt(double.parsedouble(number1
         .tostring()));
       number2.append(d);// 将number1的值开放并存储
       shownumber(numbershow, number2);
      } else {// 输入了number1、operator、number2
       double d = math.sqrt(double.parsedouble(number2
         .tostring()));
       number2.setlength(0);
       number2.append(d);// 将number2的值开放并存储
       shownumber(numbershow, number2);
      }
     }
    });
 }

 public void add(stringbuilder s1, string s2) {// 定义按钮输入后数字字符串变化的方法
  if (s2.equals("+/-")) {// 定义输入"+/-"后数字字符串的变化
   if (s1.tostring().equals("") || s1.tostring().equals("0")) {// 如果数字字符串为空或者0,那么不发生变化
    s1.append("");
   } else {// 如果数字字符串不为空也不为0,那么在数字字符串前增加或删除"-"字符
    if (s1.tostring().startswith("-")) {
     s1.deletecharat(0);
    } else {
     s1.insert(0, "-");
    }
   }
  }
  if (s2.equals(".")) {// 定义输入"."后数字字符串的变化
   if (s1.tostring().indexof(".") == -1) {// 查找数字字符串中是否含有"."字符,如果没有则执行以下代码
    if (s1.tostring().equals("")) {// 如果数字字符串为空,那么将数字字符串设置为"0."
     s1.setlength(0);
     s1.append("0.");
    } else {
     s1.append(".");
    }
   } else {// 如果有,则不发生变化
    s1.append("");
   }
  }
  if (s2.equals("0")) {// 定义输入"0"后数字字符串的变化
   if (s1.tostring().equals("0")) {// 当数字的字符串为"0"时,不发生变化
    s1.append("");
   } else {// 当数字的字符串吧为"0"时,在其字符串后增加"0"
    s1.append("0");
   }
  }
  for (int i = 1; i < 10; i++) {// 通过循环,定义输入1-9后数字字符串的变化
   string str = string.valueof(i);
   if (s2.equals(str)) {// 定义输入1-9后数字字符串的变化
    if (s1.tostring().equals("0")) {
     s1.setlength(0);
     s1.append(str);
    } else
     s1.append(str);
   }
  }
 }

 public void shownumber(jtextfield j, stringbuilder s) {// 定义数字显示区域如何显示数字字符串的方法
  if (s.tostring().equals("") == true || s.tostring().equals("0") == true) {
   j.settext("0.");
  } else if (s.tostring().indexof(".") == -1) {
   j.settext(s.tostring() + ".");
  } else {
   j.settext(s.tostring());
  }
 }
}



如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网