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 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏desperate633

LeetCode Fizz Buzz题目分析代码

Write a program that outputs the string representation of numbers from 1 to n.

9110
来自专栏码匠的流水账

聊聊storm的WindowedBolt

storm-2.0.0/storm-client/src/jvm/org/apache/storm/topology/IWindowedBolt.java

25640
来自专栏菩提树下的杨过

无限级分类(非递归算法/存储过程版/GUID主键)完整数据库示例_(2)插入记录

-- ======================================== -- Author:  <杨俊明,jimmy.yang@cntvs.c...

21090
来自专栏Albert陈凯

2018-04-17 Java的Collection集合类3分钟搞掂Set集合前言

3分钟搞掂Set集合 前言 声明,本文用的是jdk1.8 现在这篇主要讲Set集合的三个子类: HashSet集合 A:底层数据结构是哈希表(是一个元素为链...

31270
来自专栏静默虚空的博客

Lombok 使用小结

Lombok 简介 Lombok 是一种 Java 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注释...

28990
来自专栏五分钟学算法

LeeCode题目图解

There is an English version of README here. just click it!

17720
来自专栏Java编程

20个非常有用的Java程序片段

下面是20个非常有用的Java程序片段,希望能对你有用。

1.4K00
来自专栏Java编程

20个非常有用的Java程序片段

下面是20个非常有用的Java程序片段,希望能对你有用。

78020
来自专栏Hongten

python开发_calendar

如果你用过linux,你可能知道在linux下面的有一个强大的calendar功能,即日历

13720
来自专栏swag code

练习-Map集合的操作

Teacher对象的值: “Tom”,”Java”, “John”,”Oracle”, “Susan”,”Oracle”, “Jerry”,”JDBC”...

11930

扫码关注云+社区

领取腾讯云代金券