欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java swing实现的计算器,javaswing计算器,import java.

来源: javaer 分享于  点击 35132 次 点评:66

java swing实现的计算器,javaswing计算器,import java.


import java.awt.Color;  import java.awt.Dimension;  import java.awt.Font;  import java.awt.Rectangle;  import java.awt.event.ActionEvent;  import java.awt.event.ActionListener;  import java.math.BigDecimal;  import javax.swing.JButton;  import javax.swing.JFrame;  import javax.swing.JTextField;  public class Calculator extends JFrame implements ActionListener{      private JTextField text;      private BigDecimal bigDecimal_a,bigDecimal_b,bigDecimal_result;      private boolean isFirst=true,isPoint=true,isEqual=false;      private String str;      private int operator;      private JButton[] jbtns=new JButton[21];      private String[] buttonName={"",                                   "&plusmn;","C","←","&divide;",                                   "7","8","9","&times;",                                   "4","5","6","+",                                   "1","2","3","-" ,                                   "0",".","=",""};      public Calculator(){          super("计算器");          Dimension dim=this.getToolkit().getScreenSize();          this.getContentPane().setLayout(null);          //this.getContentPane().setBackground(Color.CYAN);          this.setBounds(dim.width*2/5, dim.height/4, dim.width/4, dim.height/2);          this.setResizable(false);          this.setDefaultCloseOperation(EXIT_ON_CLOSE);          text=new JTextField(20);          text.setBounds(new Rectangle(5, 3, 325, 40));          text.setHorizontalAlignment(JTextField.RIGHT);          text.setBackground(Color.CYAN);          this.getContentPane().add(text);          int count=1;          for(int i=1;i<20;i++){              jbtns[i]=new JButton();              jbtns[i] = new JButton(buttonName[i]);              jbtns[i].addActionListener(this);              this.getContentPane().add(jbtns[i]);              int k=i%4;              if(i%4==0){                  k=4;                  jbtns[i].setBounds(5+(k-1)*85, 60*count, 70, 42);                  count++;              }else{                  jbtns[i].setBounds(5+(k-1)*85, 60*count, 70, 42);              }          }          jbtns[19].setBounds(5+2*85, 300, 155, 42);          text.setFont(new Font("xjj",Font.BOLD,20));          this.setVisible(true);      }      public static void main(String[] args) {          new Calculator();      }      public void actionPerformed(ActionEvent e) {          if(e.getSource()==jbtns[19]){              str=text.getText();              if(!haveSign(str) &amp;&amp; !isEqual){                  return ;              }              int i=calculator();              if(i==0){                  return ;              }              isEqual=true;              isFirst=true;              text.setText(""+bigDecimal_result);          }          if(e.getSource()==jbtns[18] &amp;&amp; isPoint ){              isAddPoint();              String s=str.substring(0,str.length()-1);              if(havePoint(s)){                  return ;              }              isEqual=false;              isPoint=false;              text.setText(str);          }          if(e.getSource()==jbtns[1]){              str=text.getText();              if(str.length()==0){                  str="-";                  text.setText(str);                  return ;              }              if(str.charAt(str.length()-1)=='-'||str.charAt(str.length()-1)=='+'||str.charAt(str.length()-1)=='&times;'||str.charAt(str.length()-1)=='&divide;'){                  str=str+"-";                  text.setText(str);                  return ;              }          }          if(e.getSource()==jbtns[3]&amp;&amp; !isEqual){              str=text.getText();              if(str.length()==0){                  return ;              }              if(str.length()==1){                  str="";              }              if(str.length()>=2){                  if(str.charAt(str.length()-1)=='&divide;' || str.charAt(str.length()-1)=='&times;' ||str.charAt(str.length()-1)=='+' ||str.charAt(str.length()-1)=='-'){                      isFirst=true;                  }                  str=str.substring(0, str.length()-1);                  if(havePoint(str)){                      isPoint=false;                  }else{                      isPoint=true;                  }              }              text.setText(str);              return ;          }          if(e.getSource()==jbtns[2]){              str="";              isFirst=true;isPoint=true;isEqual=false;              text.setText(str);              return ;          }          JButton jbtn=(JButton)e.getSource();          if(jbtn.getText().compareTo("0")>=0 &amp;&amp; jbtn.getText().compareTo("9") <=0){              str=text.getText()+jbtn.getText();              isEqual=false;              text.setText(str);          }          for(int i=4;i<=16;i+=4){              if(e.getSource()==jbtns[i]&amp;&amp;isFirst){                  str=text.getText();                  if(str.length()==0){                      return ;                  }                  isEqual=false;                  operator=i;                  str=text.getText()+jbtns[i].getText();                  isFirst=false;                  isPoint=true;                  text.setText(str);              }          }      }      private int calculator() {          str=text.getText();          if(operator==4){              String[] string=str.split("&divide;");              if(string.length==1){                  bigDecimal_result=bigDecimal_result.divide(bigDecimal_b,5,BigDecimal.ROUND_HALF_UP);                  bigDecimal_result=bigDecimal_result.stripTrailingZeros();                  return 1;              }              bigDecimal_a=new BigDecimal(string[0]);              bigDecimal_b=new BigDecimal(string[1]);              if(bigDecimal_b.compareTo(BigDecimal.ZERO)==0){                  return 0;              }              bigDecimal_result=bigDecimal_a.divide(bigDecimal_b,20,BigDecimal.ROUND_HALF_UP);              bigDecimal_result=bigDecimal_result.stripTrailingZeros();          }          if(operator==8){              String[] string=str.split("&times;");              if(string.length==1){                  bigDecimal_result=bigDecimal_result.multiply(bigDecimal_b);                  bigDecimal_result=bigDecimal_result.stripTrailingZeros();                  return 1;              }              bigDecimal_a=new BigDecimal(string[0]);              bigDecimal_b=new BigDecimal(string[1]);              bigDecimal_result=bigDecimal_a.multiply(bigDecimal_b);              bigDecimal_result=bigDecimal_result.stripTrailingZeros();          }          if(operator==12){              String[] string=str.split("+");              if(string.length==1){                  bigDecimal_result=bigDecimal_result.add(bigDecimal_b);                  bigDecimal_result=bigDecimal_result.stripTrailingZeros();                  return 1;              }              bigDecimal_a=new BigDecimal(string[0]);              bigDecimal_b=new BigDecimal(string[1]);              bigDecimal_result=bigDecimal_a.add(bigDecimal_b);              bigDecimal_result=bigDecimal_result.stripTrailingZeros();          }          if(operator==16){              String[] string=str.split("-");              if(string.length==1){                  bigDecimal_result=bigDecimal_result.subtract(bigDecimal_b);                  bigDecimal_result=bigDecimal_result.stripTrailingZeros();                  return 1;              }              bigDecimal_a=new BigDecimal(string[0]);              bigDecimal_b=new BigDecimal(string[1]);              bigDecimal_result=bigDecimal_a.subtract(bigDecimal_b);              bigDecimal_result=bigDecimal_result.stripTrailingZeros();          }          return 1;      }      public void isAddPoint(){          str=text.getText();          if(str.length()==0){              str="0.";              return ;          }          if(str.charAt(str.length()-1)>'9'||str.charAt(str.length()-1)<'0'){              str=str+"0.";              return ;          }          str=text.getText()+".";      }      public boolean haveSign(String s){          for(int i=0;i<s.length();i++){              if(s.charAt(i)=='+' || s.charAt(i)=='-' ||s.charAt(i)=='&divide;' ||s.charAt(i)=='&times;'){                  return true;              }          }          return false;      }      public boolean havePoint(String s){          int count=0;          for(int i=0;i<s.length();i++){              if(s.charAt(i)=='.' ){                  count++;              }          }          if(count==1 &amp;&amp; haveSign(s)){              return false;          }          if(count==0 ){              return false;          }          return true;      }  }  
相关栏目:

用户点评