做这个东西主要是为了练习一下以前学习过的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. 重命名myclipse中web项目名称的过程

    1 打开 myclipse2 最顶层项目上右键,Refactor,新名,3 最顶层项目上右键,propterties, MyEclipse, Web, context-root: /新名4 替换 .c ...

  2. Python命令行解析argparse常用语法使用简介

    查看原文:http://www.sijitao.net/2000.html python中的命令行解析最简单最原始的方法是使用sys.argv来实现,更高级的可以使用argparse这个模块.argp ...

  3. Beaglebone Black 和树莓派

    我不是创客.我买了个 Beaglebone Black 来玩,主要是拿来学习. 入手前,看过好几个树莓派 (Raspi - 2 Model B)和 Beaglebone Black (BBB) 比较, ...

  4. 职责链模式,chain of responsibility

    定义: 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连城一条链,并沿着这条链传递该请求,知道有一个对象处理它为止. 客户端并不知道哪个对象会最终处理这个请求,这样 ...

  5. 2016.3.22考试(HNOI难度)

    T1 盾盾的打字机 盾盾有一个非常有意思的打字机,现在盾哥要用这台打字机来打出一段文章. 由于有了上次的经验,盾盾预先准备好了一段模板A存在了内存中,并以此为基础来打出文章B.盾盾每次操作可以将内存中 ...

  6. NPN&PNP

    一.晶体管基础知识 晶体管分2种:NPN.PNP 晶体管通常封装为TO-92,下面是元件实物图 和 元件符合: NPN: 当电压和电流被加到基极上时,NPN晶体管: 其工作原理: 就像水龙头—给控制开 ...

  7. iOS - KVO 键值观察

    1.KVO KVO 是 Key-Value Observing 的简写,是键值观察的意思,属于 runtime 方法.Key Value Observing 顾名思义就是一种 observer 模式用 ...

  8. 触发器创建及Navicat中使用

    mysql中的触发器(trigger)使用 Trigger: 示例: mysql,)); Query OK, rows affected (0.03 sec) mysql> CREATE TRI ...

  9. poj2986A Triangle and a Circle&&poj3675Telescope(三角形剖分)

    链接 2986是3675的简化版,只有一个三角形. 这题主要在于求剖分后三角形与圆的相交面积,需要分情况讨论. 具体可以看此博客 http://hi.baidu.com/billdu/item/703 ...

  10. ORACLE数据库DBMS_JOB的创建与使用

    http://my.oschina.net/u/2309120/blog/371437 创建 DBMS_JOB 使用以下语句: VARIABLE jobno number;begin DBMS_JOB ...