做这个东西主要是为了练习一下以前学习过的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. 美国插画家Mike Bear作品欣赏

    Mike Bear,美国插画师兼概念艺术家,在漫画和游戏界从业6年有余,分别为包括Popcap.Rockstar Games.Hasbro.EA等在内的业界巨头创建作品.他的画风较为抽象,大胆想象出一 ...

  2. [SAP ABAP开发技术总结]ABAP程序之间数据共享与传递

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

  3. JVM 1.类的加载、连接、初始化

    Java类的加载是由类加载器来完成的,过程如下: 首先,加载是把硬盘.网络.数据库等的class文件中的二进制数据加载到内存的过程,然后会在Java虚拟机的运行时数据区的堆区创建一个Class对象,用 ...

  4. android——学习:网格布局——GridLayout

    Android一开始就提供了几种布局控件,如线性布局LinearLayout.相对布局RelativeLayout和表格布局TableLayout等,但在很多情况下,这些布局控件是不能满足要求的,因此 ...

  5. 制作一个属于自己的BHO吧!(C#) (转)

    摘自:http://tech.ddvip.com/2013-05/1369758775196257.html BHO(Browser Helper Object)是插件,它寄存在IE浏览器中运行.在咱 ...

  6. POJ1011 (DFS+剪枝)

    Sticks Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 129606   Accepted: 30388 Descrip ...

  7. Hibernate级联删除时:Cannot delete or update a parent row: a foreign key constraint fails异常

    在删除主表数据时,报了一个异常 Cannot delete or update a parent row: a foreign key constraint fails 原因是主表中还包含字表的数据, ...

  8. SG函数题目

    HDU Fibonacci again and again 思路: 把整个游戏看成三个子游戏,然后求游戏的和 关键理解g(x) = mex(g(y), y€f(x)) , f(x)表示由x点可达的点, ...

  9. 团队作业Week5之团队贡献分的分配

    一.团队贡献分的分配规则 首先,我们团队共有5个人,平均每个人50分,所以我们团队的总分为5*50=250,我们先把50分分成以下几份: 序号 贡献类型 权重 分数 1 代码贡献 40% 20 * 5 ...

  10. iOS - CoreMotion

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