JAVA 图形开发之计算器设计(事件监听机制)

时间:2023-03-09 05:40:05
JAVA 图形开发之计算器设计(事件监听机制)

/*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/

前段时间刚帮同学用MFC写了个计算器,现在学到JAVA的图形开发,就试着水了一个计算器出来。(可以说是一个水的不能再水的计算器了,感觉MFC真好用)

既然是设计计算器,首先肯定是要做一个计算器界面出来了,但面对JAVA容器的两种布局,想把按钮放整齐真的是一件比较难的事,我就直接用了坐标法贴图(上篇博客中有介绍)。这是我设计的界面

JAVA 图形开发之计算器设计(事件监听机制)

界面设计完了,下面就要开始实现按按钮输入数据。这时就需要使用事件监听机制了。

首先需要知道如何获取数据,

//定义一个类,以ActionListener为接口
public class ButtonListener implements ActionListener { public void actionPerformed(ActionEvent e) {
String str = e.getActionCommand();//通过这个方法来获取每个按钮表示的字符串 //...
} }

当获取到按钮表示的字符串的时候就需要根据字符串的内容来进行下一步操作,这时候可以用if..else 或是switch来进行

数据部分

 if (flag1)
{//整数部分,整数部分通过一个flag1变量来判断是否写了小数点
a *= 10;
a = a + (double) Integer.parseInt(str);
s += str;
this.text1.setText(s);
// System.out.println(a);
}
else
{//小数部分
i++;
b = b + Double.parseDouble(str) / Math.pow(10, i);
s += str;
this.text1.setText(s);
// System.out.println(b);
}

符号部分可设一个int类型的变量,用来记录输入了什么运算符,最后在点击等号时,再根据该变量的值来进行运算。

case ".":
flag1 = false;
//...
break;
case "+":
flag1 = true;
flag2 = 1;
  //...
break;
//...........
case "=":
if (flag2 == 1)
//..........
break;

定义好了这个类后,就只需要再修改修改画计算器界面的方法就可以了,怎么修改呢?就是创建一个事件监听类的对象,然后在每个按钮对象的addActionListener()方法中加入该对象就可以了。

ButtonListener blist = new ButtonListener();
JButton button = new JButton();
button.addActionListener(blist);
//.....

运行一下,再算一个式子。emmmmmmmmm。。。。。。。发现了什么没有?文本框没有显示结果?!!想一想还缺了什么没有?。。。。。。。我们并没有把文本框传到我们写的类中!所以,我们需要写一个构造方法,用来传入文本框对象。

public ButtonListener(JTextField jtext) {
this.text1 = jtext;
}

那前面也要相应改为

button.addActionListener(blist);

嗯,现在再运行一下,可以计算了吧?但这只是一个简单的不能再简单的计算器,再想一想怎么能把它更加完善。