zl程序教程

您现在的位置是:首页 >  后端

当前栏目

java模仿windows计算器示例

JAVAWindows 示例 计算器 模仿
2023-06-13 09:15:25 时间

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

复制代码代码如下:


importjava.awt.Color;
importjava.awt.Container;
importjava.awt.GridLayout;
importjava.awt.Insets;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;

importjavax.swing.JFrame;
importjavax.swing.JButton;
importjavax.swing.JMenu;
importjavax.swing.JMenuBar;
importjavax.swing.JMenuItem;
importjavax.swing.JPanel;
importjavax.swing.JTextField;
importjavax.swing.SwingConstants;
importjavax.swing.plaf.basic.BasicBorders;

publicclassCalculatorextendsJFrame{
 privatestaticfinallongserialVersionUID=1L;
 Containerc=getContentPane();
 StringBuildernumber1=newStringBuilder("");//储存第1个数字字符串
 StringBuildernumber2=newStringBuilder("");//储存第2个数字字符串
 StringBuilderoperator=newStringBuilder("");//储存运算符
 StringBuilderresult=newStringBuilder("");//储存运算结果
 JTextFieldnumbershow=newJTextField("0.");//数字显示区域,初始显示为"0."

 publicstaticvoidmain(String[]args){//主方法
  Calculatorc1=newCalculator();
  c1.setVisible(true);
 }

 publicCalculator(){//计算器构造方法
  setTitle("计算器");
  setBounds(100,100,260,245);
  setResizable(false);
  setLayout(null);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  createMenuBar();//创建菜单栏
  createNumberShow();//创建数字显示区域
  createMemoShow();//创建记忆显示
  createClearButtons();//创建Backspace,CE,C等三个按钮
  createButtonArea();//创建数字按钮区域
 }

 privatevoidcreateMenuBar(){//创建菜单栏的方法
  JMenuBarmenubar=newJMenuBar();
  setJMenuBar(menubar);
  JMenumenu1=newJMenu("编辑");
  JMenumenu2=newJMenu("查看");
  JMenumenu3=newJMenu("帮助");
  menubar.add(menu1);
  menubar.add(menu2);
  menubar.add(menu3);
  JMenuItemmenu1item1=newJMenuItem("复制");
  JMenuItemmenu1item2=newJMenuItem("粘贴");
  JMenuItemmenu2item1=newJMenuItem("标准型");
  JMenuItemmenu2item2=newJMenuItem("科学型");
  JMenuItemmenu2item3=newJMenuItem("科学分组");
  JMenuItemmenu3item1=newJMenuItem("帮助主题");
  JMenuItemmenu3item2=newJMenuItem("关于计算器");
  menu1.add(menu1item1);
  menu1.add(menu1item2);
  menu2.add(menu2item1);
  menu2.add(menu2item2);
  menu2.add(menu2item3);
  menu3.add(menu3item1);
  menu3.add(menu3item2);
 }

 privatevoidcreateNumberShow(){//创建数字显示区域的方法
  numbershow.setHorizontalAlignment(JTextField.RIGHT);
  numbershow.setBounds(5,0,245,22);
  numbershow.setEnabled(false);
  numbershow.setDisabledTextColor(Color.BLACK);
  c.add(numbershow);
 }

 privatevoidcreateMemoShow(){//创建记忆显示的方法
  JTextFieldmemoshow=newJTextField();
  memoshow.setEditable(false);
  memoshow.setBounds(10,30,28,22);
  memoshow.setBorder(newBasicBorders.FieldBorder(Color.black,
    Color.black,Color.white,Color.white));
  c.add(memoshow);
 }

 privatevoidcreateClearButtons(){//创建Backspace,CE,C等三个按钮的方法
  JButton[]clearbutton=newJButton[3];
  String[]clearbuttontext={"Backspace","CE","C"};
  for(inti=0;i<3;i++){
   clearbutton[i]=newJButton();
   clearbutton[i].setText(clearbuttontext[i]);
   clearbutton[i].setHorizontalAlignment(SwingConstants.CENTER);
   clearbutton[i].setMargin(newInsets(0,0,0,0));
   clearbutton[i].setFont(newjava.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(newActionListener(){//为Backspace按钮添加监听器
     @Override
     publicvoidactionPerformed(ActionEvente){
      if(number1.toString().equals("")){//如果未做任何输入
       showNumber(numbershow,number1);//显示number1
      }elseif(operator.toString().equals("")){//如果只输入了number1
       number1.deleteCharAt(number1.toString().length()-1);//将number1的最后一个字符去掉
       showNumber(numbershow,number1);//显示number1
      }elseif(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(newActionListener(){//为CE按钮添加监听器
     @Override
     publicvoidactionPerformed(ActionEvente){
      if(number1.toString().equals("")){//如果未做任何输入
       showNumber(numbershow,number1);//显示number1
      }elseif(operator.toString().equals("")){//如果只输入了number1
       number1.setLength(0);//清除number1
       showNumber(numbershow,number1);//显示number1
      }elseif(number2.toString().equals("")){//如果输入了number1和operator
       showNumber(numbershow,number2);//不作任何处理,显示number2
      }else{//如果输入了number1、operator、number2
       number2.setLength(0);//清除number2
       showNumber(numbershow,number2);//显示number2
      }
     }
    });

  clearbutton[2].addActionListener(newActionListener(){//为C按钮添加监听器
     @Override
     publicvoidactionPerformed(ActionEvente){//将所有储存清零
      number1.setLength(0);
      number2.setLength(0);
      operator.setLength(0);
      numbershow.setText("0.");
      result.setLength(0);
     }
    });
 }

 privatevoidcreateButtonArea(){//创建数字按钮区域的方法
  JPanelButtonArea=newJPanel();
  ButtonArea.setBounds(5,55,245,125);
  ButtonArea.setLayout(newGridLayout(4,6,5,5));
  c.add(ButtonArea);

  JButton[]numberbutton=newJButton[24];
  String[]numberbuttontext={"MC","7","8","9","/","sqrt","MR",
    "4","5","6","*","%","MS","1","2","3","-","1/X","M+",
    "0","+/-",".","+","="};
  for(inti=0;i<24;i++){//使用循环为这24个按钮添加标识
   numberbutton[i]=newJButton(numberbuttontext[i]);
   ButtonArea.add(numberbutton[i]);
   if(i%6==0||i%6==4||i==23){//操作符按钮设置为红色
    numberbutton[i].setHorizontalAlignment(SwingConstants.CENTER);
    numberbutton[i].setMargin(newInsets(0,0,0,0));
    numberbutton[i].setFont(newjava.awt.Font("Arial",0,9));
    numberbutton[i].setForeground(Color.red);
   }else{//其它设置为蓝色
    numberbutton[i].setHorizontalAlignment(SwingConstants.CENTER);
    numberbutton[i].setMargin(newInsets(0,0,0,0));
    numberbutton[i].setFont(newjava.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(inti=0;i<=9;i++){//使用循环为这0-9这十个数字按钮添加监听器
   finalStringstr=String.valueOf(i);
   numberbutton[numbers[i]].addActionListener(newActionListener(){//为0-9按钮添加监听器
      @Override
      publicvoidactionPerformed(ActionEvente){
       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(newActionListener(){//为"+/-"按钮添加监听器
     @Override
     publicvoidactionPerformed(ActionEvente){
      if(operator.toString().equals("")){//没有输入operator之前
       add(number1,"+/-");//只设置number1的值
       showNumber(numbershow,number1);//只显示number1的值
      }else{//输入operator之后
       add(number2,"+/-");//只设置number2的值
       showNumber(numbershow,number2);//只显示number2的值
      }
     }
    });

  numberbutton[21].addActionListener(newActionListener(){//为"."按钮添加监听器
     @Override
     publicvoidactionPerformed(ActionEvente){
      if(operator.toString().equals("")){//在输入operator之前,只显示number1的值
       add(number1,".");
       showNumber(numbershow,number1);
      }else{//在输入operator之后,只显示number2的值
       add(number2,".");
       showNumber(numbershow,number2);
      }
     }
    });

  numberbutton[22].addActionListener(newActionListener(){//为"+"按钮添加监听器
     @Override
     publicvoidactionPerformed(ActionEvente){
      operator.setLength(0);
      operator.append("+");
     }
    });

  numberbutton[16].addActionListener(newActionListener(){//为"-"按钮添加监听器
     @Override
     publicvoidactionPerformed(ActionEvente){
      operator.setLength(0);
      operator.append("-");
     }
    });

  numberbutton[10].addActionListener(newActionListener(){//为"*"按钮添加监听器
     @Override
     publicvoidactionPerformed(ActionEvente){
      operator.setLength(0);
      operator.append("*");
     }
    });

  numberbutton[4].addActionListener(newActionListener(){//为"/"按钮添加监听器
     @Override
     publicvoidactionPerformed(ActionEvente){
      operator.setLength(0);
      operator.append("/");
     }
    });

  numberbutton[23].addActionListener(newActionListener(){//为"="按钮添加监听器
     @Override
     publicvoidactionPerformed(ActionEvente){
      if(number1.toString().equals("")){//当number1为空时
       showNumber(numbershow,number1);
      }elseif(operator.toString().equals("")){//当number1不为空,而operator为空时
       showNumber(numbershow,number1);
      }elseif(number2.toString().equals("")){//当number1、operator均不为空,而number2为空时
       switch(operator.toString()){
       case("+"):{
        number2.append(number1.toString());
        doubled=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());
        doubled=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());
        doubled=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());
        doubled=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("+"):{
        doubled=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("-"):{
        doubled=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("*"):{
        doubled=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("/"):{
        doubled=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(newActionListener(){//为"1/x"按钮添加监听器
     @Override
     publicvoidactionPerformed(ActionEvente){
      if(number1.toString().equals("")){//没有输入number1时
       numbershow.setText("除数不能为零");
      }elseif(operator.toString().equals("")){//输入了number1,但没有输入operator
       if(Double.parseDouble(number1.toString())==0){//如果number1的值为零
        numbershow.setText("除数不能为零");
       }else{//如果number1的值不为零
        doubled=1/(Double.parseDouble(number1
          .toString()));
        number1.setLength(0);
        number1.append(d);//将number1的值开放并存储
        showNumber(numbershow,number1);
       }
      }elseif(number2.toString().equals("")){//输入了number1、operator,但没有输入number2
       doubled=1/(Double.parseDouble(number1
         .toString()));
       number2.append(d);//将number1的值开放并存储
       showNumber(numbershow,number2);
      }else{//输入了number1、operator,number2
       doubled=1/(Double.parseDouble(number2
         .toString()));
       number2.setLength(0);
       number2.append(d);//将number2的值开放并存储
       showNumber(numbershow,number2);
      }
     }
    });

  numberbutton[11].addActionListener(newActionListener(){//为"%"按钮添加监听器
     @Override
     publicvoidactionPerformed(ActionEvente){
      //暂时空缺
     }
    });

  numberbutton[5].addActionListener(newActionListener(){//为"sqrt"按钮添加监听器
     @Override
     publicvoidactionPerformed(ActionEvente){
      if(number1.toString().equals("")){//没有输入number1时
       showNumber(numbershow,number1);
      }elseif(operator.toString().equals("")){//输入了number1,但没有输入operator
       if(Double.parseDouble(number1.toString())<0){//number1小于0
        numbershow.setText("函数输入无效");
       }else{//number1大于0
        doubled=Math.sqrt(Double.parseDouble(number1
          .toString()));
        number1.setLength(0);
        number1.append(d);//将number1的值开放并存储
        showNumber(numbershow,number1);
       }
      }elseif(number2.toString().equals("")){//输入了number1、operator,但没有输入number2
       doubled=Math.sqrt(Double.parseDouble(number1
         .toString()));
       number2.append(d);//将number1的值开放并存储
       showNumber(numbershow,number2);
      }else{//输入了number1、operator、number2
       doubled=Math.sqrt(Double.parseDouble(number2
         .toString()));
       number2.setLength(0);
       number2.append(d);//将number2的值开放并存储
       showNumber(numbershow,number2);
      }
     }
    });
 }

 publicvoidadd(StringBuilders1,Strings2){//定义按钮输入后数字字符串变化的方法
  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(inti=1;i<10;i++){//通过循环,定义输入1-9后数字字符串的变化
   Stringstr=String.valueOf(i);
   if(s2.equals(str)){//定义输入1-9后数字字符串的变化
    if(s1.toString().equals("0")){
     s1.setLength(0);
     s1.append(str);
    }else
     s1.append(str);
   }
  }
 }

 publicvoidshowNumber(JTextFieldj,StringBuilders){//定义数字显示区域如何显示数字字符串的方法
  if(s.toString().equals("")==true||s.toString().equals("0")==true){
   j.setText("0.");
  }elseif(s.toString().indexOf(".")==-1){
   j.setText(s.toString()+".");
  }else{
   j.setText(s.toString());
  }
 }
}