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

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

  ---》

代码:

 package dialog_color;

 import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import java.util.regex.Matcher;
import java.util.regex.Pattern; import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
/*简易计算器*/
public class Simple_jisuanqi {
public static void main(String args []) { Caculate mycacu = new Caculate();
// Container con =mycacu.getContentPane();
mycacu.setTitle("GXjun计算器"); }
}
class Caculate extends JFrame implements ActionListener
{
Container mycon; //设置重量级容器
JPanel jpanel_1,jpanel_2,jpanel_3; //设置轻量级布局
myJButton button []= new myJButton [20];
JTextField mytext;
JLabel label;
GridLayout grid = new GridLayout(4,4);
Caculate(){ //构造函数
mycon = getContentPane();
jpanel_1 = new JPanel(); /*默认的格式为FlowLayout*/
jpanel_2 =new JPanel();
jpanel_3 = new JPanel();
jpanel_2.setLayout(grid);
mytext = new JTextField(14);
mytext.setEditable(false); //设置成为不能
mytext.setFont(new Font("Arial",Font.BOLD,22));
/* for(int i=0;i<20;i++)
button[i]=new myJButton(null);*/
button[0] = new myJButton(" 后退 ",22);
button[0].addActionListener(this);
button[1] = new myJButton(" 归零 ",22);
button[1].addActionListener(this);
jpanel_1.add(button[0]);
jpanel_1.add(mytext);
jpanel_1.add(button[1]);
label = new JLabel(new ImageIcon("C:\\Users\\Administrator.USERSWO-MKA59UH\\Desktop\\java\\bin\\dialog_color\\a.jpg"));
// label = new JLabel(new ImageIcon("D:\\2\\2.gif"));
jpanel_3.add(label);
for(int i=2;i<12;i++)
button[i]=new myJButton(" "+i+" ",26);
char str[][]={{'7','8','9','/'},{'4','5','6','*'},{'1','2','3','-'},{'0','.','+','='}};
for(int i=0;i<4;i++)
for(int j=0;j<4;j++){
button[2+i*4+j] =new myJButton(" "+str[i][j]+" ",26);
button[2+i*4+j].addActionListener(this);
jpanel_2.add(button[2+i*4+j]);
}
mycon.add(jpanel_1,BorderLayout.CENTER);
mycon.add(jpanel_3,BorderLayout.NORTH);
mycon.add(jpanel_2,BorderLayout.SOUTH);
init();
}
void init() /*相关组件的一系列的初始化*/
{
setBounds(100, 100, 477, 280);
setVisible(true);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
String str ="";
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
//System.out.println(e.getActionCommand());
if(e.getSource()==button[0]||e.getSource()==button[1])
{
if(e.getSource()==button[0]){
System.out.println(str);
if(!str.isEmpty()){
str=str.substring(0, str.length()-1) ; //后退一格
}
}
else str="";
}
else
{
if(e.getSource()==button[17]){
//等于号的时候,又该如何处理? 正则表达式
//System.out.println(e.getActionCommand());
/*System.out.println(sove_calc(str));*/
Double judge=sove_calc(str.trim());
if(judge==Double.MAX_VALUE)
{
mytext.setText("error!");
validate();
return;
}
else str=judge.toString();
}
else{
str+=e.getActionCommand().toString().trim();
}
}
if(str.isEmpty()) mytext.setText("0");
else mytext.setText(str);
validate();
}
private Double sove_calc(String str)
{
/*怎么提起出字符串里面的运算符号呢*/
Pattern mypa = Pattern.compile("\\+|\\-|\\*|\\/");
Matcher mtma = mypa.matcher(str);
List<String> listhoge = new ArrayList();
while(mtma.find()) listhoge.add(mtma.group());
String [] hoge = listhoge.toArray(new String [0]); //获取运算符号
/*突然遇到一个问题怎么从字符串提起浮点型数据呢?*/
Pattern mypart = Pattern.compile("\\.\\d|\\d+(\\.\\d+)?");
Matcher mtmatcher =mypart.matcher(str);
List<String> listval = new ArrayList();
while(mtmatcher.find())
listval.add(mtmatcher.group());
String [] val=listval.toArray(new String[0]);
double sum=Double.parseDouble(val[0]);
for( int i=0;i<hoge.length;i++)
{
System.out.println(hoge[i].charAt(0));
switch(hoge[i].charAt(0))
{
case '+': sum += Double.parseDouble(val[i+1]); break;
case '-': sum -= Double.parseDouble(val[i+1]); break;
case '*': sum *= Double.parseDouble(val[i+1]); break;
case '/':
{
Double tem=Double.parseDouble(val[i+1]);
if(tem.equals(0)) return Double.MAX_VALUE;
sum/=tem;
break;
}
default : System.out.println("error!"); break;
}
}
return sum;
}
}
class myJButton extends JButton
{
public myJButton(String name,int size)
{
// TODO Auto-generated constructor stub
super(name);
setFont(new Font("仿宋",Font.BOLD,size));
setMargin(new Insets(2,2,2,2));
setBorder(BorderFactory.createRaisedBevelBorder());
setBackground(Color.LIGHT_GRAY);
}
}

java设计之简单的JAVA计算器的更多相关文章

  1. 【Java】一个简单的Java应用程序

    简单记录,Java 核心技术卷I 基础知识(原书第10 版) 一个简单的Java应用程序"Hello, World!" Hello, World! Goodbye,World! 一 ...

  2. Java提高篇—— 简单介绍Java 的内存泄漏

    java最明显的一个优势就是它的内存管理机制.你只需简单创建对象,java的垃圾回收机制负责分配和释放内存.然而情况并不像想像的那么简单,因为在Java应用中经常发生内存泄漏. 本教程演示了什么是内存 ...

  3. 2015.11.27初识java一集简单的java小程序

    JAVA配置环境变量方法: 1.打开我的电脑--属性--高级--环境变量 2.新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME变量值:D:\Java\jdk1.7.0_ ...

  4. Java:一个简单的Java应用程序

    /** * 这是文档注释 * @version  * @author  */ /* 这之间的内容也是注释 */ //这是行注释 public class FirstSample { public st ...

  5. POJO,简单的Java对象

    POJO = "Plain Ordinary Java Object",简单的Java对象,是为了避免和EJB混淆所创造的简称,是MartinFowler等发明的一个术语,用来表示 ...

  6. 哈希表hashTable的Java设计

    1:哈希表的概念 2:设计原理 3:哈希表的Java设计

  7. Java消息系统简单设计与实现

    前言:由于导师在我的毕设项目里加了消息系统(本来想水水就过的..),没办法...来稍微研究研究吧..简单简单... 需求分析 我的毕设是一个博客系统,类似于简书这样的,所以消息系统也类似,在用户的消息 ...

  8. JAVA课程设计——一个简单的教务人事管理系统

    大三上学期期末总结,没错,上学期,写在下学期新学期开始,哈哈哈. 上学期学习了面向对象程序设计,课程设计的题目使用JAVA语言完成一个简单的教务人事管理系统,能够实现访问数据库的登录验证,分别按部门和 ...

  9. 基于mysql和Java Swing的简单课程设计

    摘要 现代化的酒店组织庞大.服务项目多.信息量大.要想提高效率.降低成本.提高服务质量和管理水平,进而促进经济效益,必须利用电脑网络技术处理宾馆酒店经营数据,实现酒店现代化的信息管理.本次课程设计运用 ...

随机推荐

  1. Django1.9 Python3.4出现Error loading MySQLdb

    linux Errorloading MySQLdb module: No module named MySQLdb 这是因为目前 MySQLdb 还不支持 python3.x ,开源无人维护哈 之前 ...

  2. Linux链接库三(C跟C++之间动态库的相互调用)

    http://www.cppblog.com/wolf/articles/74928.html http://www.cppblog.com/wolf/articles/77828.html http ...

  3. Logical Databases逻辑数据库

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  4. [SAP ABAP开发技术总结]消息处理Messages

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. Java Base64加密、解密原理Java代码

    Java Base64加密.解密原理Java代码 转自:http://blog.csdn.net/songylwq/article/details/7578905 Base64是什么: Base64是 ...

  6. 测算Redis处理实际生产请求的QPS/TPS

    测算Redis处理实际生产请求的QPS/TPS Benchmark工具 redis发布版本中自带了redis-benchmark性能测试工具; 示例: 使用50个并发连接,发出100000个请求,每个 ...

  7. STORM_0009_Lifecycle-of-a-topology/拓扑的生命周期

    http://storm.apache.org/releases/1.0.1/Lifecycle-of-a-topology.html STORM拓扑的生命周期   本页的内容基于0.7.1代码,后来 ...

  8. iOS - CoreMotion

    前言 NS_CLASS_AVAILABLE(NA,4_0) @interface CMMotionManager : NSObject @available(iOS 4.0, *) public cl ...

  9. Spring 自动装配 Bean

    Spring3系列8- Spring 自动装配 Bean 1.      Auto-Wiring ‘no’ 2.      Auto-Wiring ‘byName’ 3.      Auto-Wiri ...

  10. EF中使用SQL语句或存储过程(小笔记)

    1.无参数查询 var model = db.Database.SqlQuery<UserInfo>("select* from UserInfoes ").ToLis ...