计算器监听"/>
java计算器监听
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;
}
}
更多推荐
java计算器监听
发布评论