java设计之简单的JAVA计算器

时间:2022-05-05
本文章向大家介绍java设计之简单的JAVA计算器,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

       做这个东西主要是为了练习一下以前学习过的java Swing,所以那些复杂的算法就没有加载到里面去........

       先展示一下效果....额,当然不是这个样子....

  ---》

代码:

  1 package dialog_color;
  2 
  3 import java.awt.BorderLayout;
  4 import java.awt.Color;
  5 import java.awt.Container;
  6 import java.awt.FlowLayout;
  7 import java.awt.Font;
  8 import java.awt.GridLayout;
  9 import java.awt.Insets;
 10 import java.awt.event.ActionEvent;
 11 import java.awt.event.ActionListener;
 12 import java.math.BigInteger;
 13 import java.util.ArrayList;
 14 import java.util.List;
 15 import java.util.Stack;
 16 import java.util.regex.Matcher;
 17 import java.util.regex.Pattern;
 18 
 19 import javax.swing.BorderFactory;
 20 import javax.swing.ImageIcon;
 21 import javax.swing.JButton;
 22 import javax.swing.JFrame;
 23 import javax.swing.JLabel;
 24 import javax.swing.JPanel;
 25 import javax.swing.JTextField;
 26 import javax.swing.UIManager;
 27  /*简易计算器*/ 
 28 public class Simple_jisuanqi {
 29   public static  void main(String args []) {
 30 
 31        Caculate mycacu = new Caculate();
 32      //  Container con =mycacu.getContentPane();
 33        mycacu.setTitle("GXjun计算器");
 34        
 35   }
 36 }
 37 class Caculate extends JFrame implements ActionListener
 38 {
 39      Container  mycon;    //设置重量级容器
 40      JPanel  jpanel_1,jpanel_2,jpanel_3;    //设置轻量级布局
 41      myJButton button []= new myJButton [20];
 42      JTextField mytext;
 43      JLabel label;
 44     GridLayout grid = new GridLayout(4,4);
 45     Caculate(){          //构造函数
 46         mycon = getContentPane();
 47         jpanel_1 = new JPanel();  /*默认的格式为FlowLayout*/
 48         jpanel_2 =new JPanel();
 49         jpanel_3 = new JPanel();
 50         jpanel_2.setLayout(grid);
 51         mytext = new JTextField(14);
 52         mytext.setEditable(false);   //设置成为不能
 53         mytext.setFont(new Font("Arial",Font.BOLD,22));
 54        /* for(int i=0;i<20;i++)
 55          button[i]=new myJButton(null);*/
 56         button[0] = new myJButton(" 后退  ",22);
 57         button[0].addActionListener(this);
 58         button[1] = new myJButton("  归零  ",22);
 59         button[1].addActionListener(this);
 60         jpanel_1.add(button[0]);
 61         jpanel_1.add(mytext);
 62         jpanel_1.add(button[1]);
 63         label = new JLabel(new ImageIcon("C:\Users\Administrator.USERSWO-MKA59UH\Desktop\java\bin\dialog_color\a.jpg"));
 64        // label = new JLabel(new ImageIcon("D:\2\2.gif"));
 65         jpanel_3.add(label);
 66         for(int i=2;i<12;i++)
 67             button[i]=new myJButton(" "+i+" ",26);
 68         char str[][]={{'7','8','9','/'},{'4','5','6','*'},{'1','2','3','-'},{'0','.','+','='}};
 69         for(int i=0;i<4;i++)
 70           for(int j=0;j<4;j++){
 71               button[2+i*4+j] =new myJButton("  "+str[i][j]+"  ",26);
 72               button[2+i*4+j].addActionListener(this);
 73               jpanel_2.add(button[2+i*4+j]);
 74             }
 75        mycon.add(jpanel_1,BorderLayout.CENTER);
 76        mycon.add(jpanel_3,BorderLayout.NORTH);
 77        mycon.add(jpanel_2,BorderLayout.SOUTH);
 78          init();
 79    }
 80    void init() /*相关组件的一系列的初始化*/
 81    {
 82      setBounds(100, 100, 477, 280);
 83      setVisible(true);
 84      setResizable(false);
 85      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
 86    }
 87    String str ="";   
 88 @Override
 89 public void actionPerformed(ActionEvent e) {
 90     // TODO Auto-generated method stub
 91     //System.out.println(e.getActionCommand());
 92      if(e.getSource()==button[0]||e.getSource()==button[1])
 93       {
 94             if(e.getSource()==button[0]){
 95               System.out.println(str);
 96             if(!str.isEmpty()){     
 97               str=str.substring(0, str.length()-1) ; //后退一格 
 98              }
 99             }
100             else str="";
101       }
102      else
103      {
104       if(e.getSource()==button[17]){ 
105         //等于号的时候,又该如何处理?  正则表达式
106         //System.out.println(e.getActionCommand());
107          /*System.out.println(sove_calc(str));*/
108           Double judge=sove_calc(str.trim());
109           if(judge==Double.MAX_VALUE)
110           {
111               mytext.setText("error!");
112               validate();
113               return;
114           }
115           else str=judge.toString();
116       }
117       else{
118           str+=e.getActionCommand().toString().trim();
119       }
120      }
121      if(str.isEmpty())  mytext.setText("0");
122      else mytext.setText(str);
123         validate();
124 }
125 private Double sove_calc(String str)
126 {
127     /*怎么提起出字符串里面的运算符号呢*/
128     Pattern mypa = Pattern.compile("\+|\-|\*|\/");
129       Matcher mtma = mypa.matcher(str);
130       List<String> listhoge = new ArrayList();
131       while(mtma.find()) listhoge.add(mtma.group());
132        String [] hoge = listhoge.toArray(new String [0]);  //获取运算符号
133    /*突然遇到一个问题怎么从字符串提起浮点型数据呢?*/
134      Pattern mypart = Pattern.compile("\.\d|\d+(\.\d+)?");    
135      Matcher mtmatcher =mypart.matcher(str);
136      List<String> listval = new ArrayList();
137      while(mtmatcher.find())
138        listval.add(mtmatcher.group());
139      String [] val=listval.toArray(new String[0]); 
140      double sum=Double.parseDouble(val[0]);
141     for( int i=0;i<hoge.length;i++)
142     {
143          System.out.println(hoge[i].charAt(0));
144        switch(hoge[i].charAt(0))
145        {
146          case '+':  sum += Double.parseDouble(val[i+1]); break;
147          case '-':  sum -= Double.parseDouble(val[i+1]); break;
148          case '*':  sum *= Double.parseDouble(val[i+1]); break;
149          case '/':
150          {
151             Double tem=Double.parseDouble(val[i+1]);
152             if(tem.equals(0))  return Double.MAX_VALUE;
153             sum/=tem;
154             break;
155          }
156          default :  System.out.println("error!"); break;
157        }
158    }
159   return sum;
160 }
161 }
162 class  myJButton extends JButton
163 {
164   public myJButton(String name,int size) 
165   {
166         // TODO Auto-generated constructor stub
167       super(name);
168       setFont(new Font("仿宋",Font.BOLD,size));
169     setMargin(new Insets(2,2,2,2));
170     setBorder(BorderFactory.createRaisedBevelBorder());
171     setBackground(Color.LIGHT_GRAY);
172   }     
173 }