花了两个小时做的-- 算不算久呢? 事件监听器 计算器java版 GUI

package day18.Gui2;
/**
 *我的第一个计算器  知识点包括  
 *import java.awt.TextArea;
	import java.awt.event.ActionEvent;
	import java.awt.event.ActionListener;
	import java.math.BigInteger;
	
	import javax.swing.JButton;
	import javax.swing.JFrame;
	import javax.swing.JPanel;
	重点掌握事件机制。
	简单的说就是 按钮需要被注册  但是注册的那个对象是需要实现ActionListender 的 并复写其中事件处理的方法 
	这样 这个对象就成了一个事件监听器 准确的说是这个对象中的那个被复写了的函数成为了事件的处理方法

*/
import java.awt.GridLayout;

import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.math.BigInteger;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;



public class Calulator implements ActionListener {
	JFrame jf = null;
	JPanel jp1 = null;
	JPanel jp2 = null;
	TextArea jfd  = null;
	StringBuffer s1 = new StringBuffer();
	StringBuffer s2 = new StringBuffer();
	StringBuffer stotal = new StringBuffer();
	BigInteger int1 = null;
	BigInteger int2  = null;
	BigInteger b1 = null;
	BigInteger b2 = null;
	int sum = 0;
	JButton [] jbs = new JButton[16];
	Calulator()
	{
		init();
	}
	public void init(){
		jf = new JFrame();
		jf.setTitle("这是我的第一个计算器");	
		//初始化按钮
		initButton();
		firstPanel();//定义上面的文本框
		jf.setLayout(new GridLayout(2,1));// 设置总体的布局
		jf.add(jp1); //添加
		jf.add(jp2);
		
		jf.pack();//视觉最佳的长宽
		jf.setVisible(true);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	public void initButton(){
		//定义所有按钮
		jbs[0]= new JButton(""+0);
		for(int i = 1 ; i<10 ;i++)
		{
			jbs[i] = new JButton(""+i);
		}
		jbs[10]= new JButton("+");
		jbs[11]= new JButton("-");
		jbs[12]= new JButton("*");
		jbs[13]= new JButton("/");
		jbs[14]= new JButton("=");
		jbs[15]= new JButton("退出");
		//给所有按钮注册监听器   监听器为this 本类继承了 按钮事件驱动接口
		for(int i = 0 ; i<16;i++)
			jbs[i].addActionListener(this);
		jp2 =new JPanel();
		jp2.setLayout(new GridLayout(3,5));
		for(int i = 1 ;i<4;i++){
			jp2.add(jbs[i]);
		}
		//下面是 把所有的 按钮装在 面板jp1 里
		//这顺序看不懂没关系 因为我本子上是这么画的。。 运行了就知道怎么回事了
		jp2.add(jbs[0]);
		jp2.add(jbs[14]);
		jp2.add(jbs[4]);
		jp2.add(jbs[5]);
		jp2.add(jbs[6]);
		jp2.add(jbs[10]);
		jp2.add(jbs[11]);
		jp2.add(jbs[7]);
		jp2.add(jbs[8]);
		jp2.add(jbs[9]);
		jp2.add(jbs[12]);
		jp2.add(jbs[13]);
	}
	public void firstPanel(){
		 jfd  =new TextArea();
		 jp1 = new JPanel();
		 jp1.add(jfd);
		 jfd.setText("大数计算器  happy了吧  哈哈哈哈哈请输入");
	}
	@Override
	//监听鼠标事件 对不同的鼠标所发生的事件进行分别判断
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		int flag = 0; //0 表示最后一个输入的是整数 继续可以输入  1 表示 为字符串 s1该截断  3 表示等号 
		String a = null;
		a = e.getActionCommand();//得到按钮的信息 此动作相关的命令字符串 0-9 +-*/ =
		if(a.equals("退出")) //此处没有实现 为了美观
			jf.dispose();
			//判断是否为0-9
					if(a.equals("-")||a.equals("*")||a.equals("/")||a.equals("+"))
						flag = 1;	
					else if(a.equals("="))
						flag = 2;
					else
						flag = 0;
		if(flag == 0  ) 
		{
			stotal.append(a);//无论遇到什么都将其保存
			jfd.setText(new String(stotal));
			
			s1.append(a);  //数字保存进s1
		}
		else if(flag == 1)
		{
			stotal.append(a); 
			jfd.setText(new String(stotal));			
			
			s2.append(a);//字符保存在s2
//			int1 = Integer.parseInt(new String(s1)); //如果是非大数时该这么做
			int1 = new BigInteger(new String(s1));//将 第一个s1 中的字符串--》大数int1 
			s1.delete(0, s1.length());	//清空s1
		}
		else if(flag ==2)
		{
			stotal.append(a);
			jfd.setText(new String(stotal));
			
//			int2 = Integer.parseInt(new String(s1));
			int2 = new BigInteger(new String(s1));
			
			//判断为= 就可以计算了
			stotal.append(caculate(int1,int2,new String(s2))+"");
			jfd.setText(new String(stotal));
			//清空啊、、、 一定要清
			s1.delete(0, s1.length());
			s2.delete(0, s2.length());
			stotal.delete(0, stotal.length());
		}
	}
	//大数运算 
	public BigInteger caculate(BigInteger a ,BigInteger b ,String  s)
	{
		b1 = a;
		b2 = b;
		if(s.equals("+"))
		{
			return b1.add(b2);
		}
		else if(s.equals("/"))
		{
			return b1.divide(b2);
		}
		else if(s.equals("*"))
		{
			return b1.multiply(b2);
		}		
		else if(s.equals("-"))
		{
			return b1.subtract(b2);
		}
		else
			return null;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值