如何用java GUI写一个计算器
最近在学java GUI ,光看视频不动手是不行的,所以我打算做一个计算器练练手。
这是电脑自带的计算器,我们就以它为模板做一个简易的计算器
而下面这个就是我们做出来的计算器最终的样子
我们可以把计算器分为三个部分,计算器界面,监听事件,计算器运算程序,所以也就可以定义成三个类,但是这样写太过麻烦,所以我们把监听事件写成一个内部类,计算器运算程序写成一个函数,而计算器界面则是一个继承Frame的类。
一、用户界面
1、首先我们要知道需要哪些组件
我的这个计算器可以简单分为两个部分,按键区和输入输入区,所以我们需要两个Panel,按键区需要20个Button,输入框我们用TextField,而输出框则是一个Label
2、定义这些组件
3、并对其初识化(即写入构造函数)
4、有了组件之后我们下面就开始布局
设置窗口的大小和位置,设置全局字体,总体布局方式。此处注意,frame和panel都有其默认的布局方式,若要自定义布局,必须写上setLayout(null),否则自定义的大小和位置都将无效
然后下面的操作就是搭积木了
上方的面板我们采用自定义布局方式,所以输入框输出库的大小和位置都要自己设置。设置面板背景颜色,输入框和输出库的字体,然后将其添加到面板中。
上方的面板搭完了,下面开始下方的面板,下方的面板搭建相对简单,直接采用表格布局方式即可。
设置面板的大小和位置,布局方式,背景颜色,然后将按钮按顺序(自左而右,自上而下)添加到面板中
最后将两个面板添加到窗口Frame上就行了,并且设置Frame可见(默认不可见),大小不可调(默认可调)
这样我们的界面就跟最终的一模一样了,只是点哪里都没有反应,关也关不掉。
二、监听事件
监听事件的作用就是,让界面能响应用户的操作。
1、设置程序关闭监听事件
这个比较简单,直接给Frame加上就行了
2、接下来的是普通组件的监听事件,我们把它写成一个内部类
判断事件源头,如果是输入框那么就打印输入框的信息,如果是Backspace,那么就让输入框的文本减少一个,如果是empty,那么就清空输入框的内容,如果是=,那么就调用运算函数(这里下面会提到),运算输入框的内容,否则的话就让输入框的内容加上自己代表的字符,例如,输入框“5+”,此时点击9,那么输入框变成”5+9“。
3、最后为所有按钮和输入框添加此事件监听器
三、运算器程序
前面说过,我们把运算器程序写成一个函数,当点击**“=”**的时候调用函数,那么我们来讲讲这个函数
程序源码采用递归思想,此为程序源码,借鉴于 陈旭金-小金子,他讲的很详细,很透彻,建议去看看
public double parse(String content){
try {
//括号处理
int indexStart=content.lastIndexOf('(');
if (indexStart!=-1){
int indexEnd=content.indexOf(')',indexStart);
double d=parse(content.substring(indexStart+1,indexEnd));
return parse(content.substring(0,indexStart)+d+content.substring(indexEnd+1));
}
//加法运算处理
int index=content.indexOf('+');
if(index!=-1){
return parse(content.substring(0,index))+parse(content.substring(index+1));
}
//减法运算处理
index=content.lastIndexOf('-');
if(index!=-1){
return parse(content.substring(0,index))-parse(content.substring(index+1));
}
//乘法运算处理
index=content.indexOf('*');
if(index!=-1){
return parse(content.substring(0,index))*parse(content.substring(index+1));
}
//除法运算处理
index=content.lastIndexOf('/');
if(index!=-1){
return parse(content.substring(0,index))/parse(content.substring(index+1));
}
return Double.parseDouble(content);//输出纯数字
} catch (Exception e) {
error=true;
return 0;
}
}