做这个东西主要是为了练习一下以前学习过的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. 单向和双向tvs管

    tvs管器件按极性可分为单极性和双极性两种,即单向tvs管和双向tvs管.    单向tvs管保护器件仅能对正脉冲或者负脉冲进行防护,而双向tvs管保护器件一端接要保护的线路,一端接地,无论来自反向还 ...

  2. 用sql的select语句从数据库中获取数据

    基本的select语句 select语句中的算数表达式和NULL值 列的别名 使用连接符操作,literal character strings,alternative quote operator, ...

  3. TestNg测试框架使用笔记

    Gradle支持TestNG test { useTestNG(){ //指定testng配置文件 suites(file('src/test/resources/testng.xml')) } } ...

  4. nyoj 1058部分和问题(DFS)

    部分和问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 给定整数a1.a2........an,判断是否可以从中选出若干数,使它们的和恰好为K.   输入 首先, ...

  5. iOS - OC SQLite 数据库存储

    前言 采用 SQLite 数据库来存储数据.SQLite 作为一中小型数据库,应用 iOS 中,跟前三种保存方式相比,相对比较复杂一些. 注意:写入数据库,字符串可以采用 char 方式,而从数据库中 ...

  6. iOS - KVC 键值编码

    1.KVC KVC 是 Key-Value Coding 的简写,是键值编码的意思,属于 runtime 方法.Key Value Coding 是 cocoa 的一个标准组成部分,是间接给对象属性设 ...

  7. mysql概要(二)类型

    1.mysql数值型范围 tinyint可选属性 tinyint(N) unsigned zerofill N:表示显示长度,与zerofill配合使用,即长度不够用0填充,并且自动变成无符号的数,仅 ...

  8. mybatis的xml文件中如何处理大小于号

    在mybatis的xml配置文件中会遇到大小于号转化的问题,解决问题的方法如下: 1.用转义字符把>和<替换掉 SELECT * FROM test WHERE AND start_dat ...

  9. bootstrap学习笔记<十一>(导航条)

    基础导航条.样式:class="navbar navbar-default",属性:role="navigation" <div class=" ...

  10. linux清空文件等有用的指令

    1).    > filename 2).    :> filename 3).   echo "" > filename  (文件大小被截为1字节) 4).   ...