终于完成了我第二个用事件做的项目,就是简单计算器的实现。这个计算器是仿造windows xp下的计算器制作的。
我们的计算器要实现有以下功能:
退格、清除当前、清除、数字按钮、三角函数、正负号、点、四则运算、开根号、百分号、倒数。
我们不妨分为三类:
基础按钮:数字按钮、退格、清除
单位运算:三角函数、正负号、点、百分号、倒数
双位运算:四则运算
首先我们要看一下窗体的布局,默认的是边框布局,那我们不妨就用边框布局啦~
北部是一个文本输入框,中间是有很多很多按钮的面板。
我们先做北部,记得把文本框设置为不可编辑。
public JPanel panelnorth() {
JPanel panel = new JPanel();
// 设文本框大小
tf.setPreferredSize(new Dimension(50, 50));
tf.setFont(new Font("宋体",Font.BOLD,19));
// 设置不可编辑
tf.setEditable(false);
// 设置右对齐
tf.setHorizontalAlignment(SwingConstants.RIGHT);
tf.setOpaque(false);
// 将文本框添加至窗体
panel.add(tf);
// 返回北面窗体对象
return panel;
}
首先我们添加数字按钮,以0为例:
//设置按钮0
JButton jbu = new JButton("0");
//给按钮添加监听器
jbu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//如果当前窗口就为0,就设置当前窗口为0
if (tf.getText().equals("0")) {
tf.setText("0");
} else {
//否则就会在文本后添加0
tf.setText(tf.getText() + "0");
}
}
});
然后是后退按钮:
//实例化一个后退按钮
JButton jbu = new JButton("Backspace");
//给后退按钮加监听器
jbu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//获取文本框的字体
String temp = tf.getText();
//减少最后的一个字符
temp = temp.substring(0, temp.length() - 1);
//设置文本框的内容
tf.setText(temp);
}
});
清屏按钮:
//设置按钮clear
JButton jbu = new JButton("C");
//给按钮添加监听器
jbu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//初始化所有文本
a = 0;b = 0;sign = ' ';bol = false;
//设置文本框为0
tf.setText("0");
}
});
接下来是简答的单位运算,我们以开根号为例:
//添加按钮开根号
JButton jbu9 = new JButton("sqrt");
//给按钮添加监听器
jbu9.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//获取文本框内容转化为数字
double temp = Double.parseDouble(tf.getText());
//给数字开根号
temp = Math.sqrt(temp);
//将数字转化为字符串添加到文本框中
tf.setText(Double.toString(temp));
//设置为可计算
bol = true;
}
});
双位运算,我们首先声明变量:
private char sign = ' ';
private double a = 0, b = 0;
private boolean bol = false;
sign代表运算符号,a代表第一个数字,当按运算符时记录此数字,并且记录此符号,然后设置为可编辑。
而后,我们再输入一个数字,当按等于号时,就会记录第二个数字赋给b,然后会输出最终结果。
我们以加号为例:
//添加按钮加号
JButton jbu = new JButton("+");
//添加按钮监听器
jbu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//设置标识符为加号
sign = '+';
//从文本框获取字符串转化为数字给第一个变量
a = Double.parseDouble(tf.getText());
//设置可以编辑
bol = true;
}
});
还有就是最重要的等于号:
//实例化按钮对象等于
JButton jbu = new JButton("=");
//给按钮添加监听器
jbu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//如果不可编辑,把当前窗体的值赋给b
if(!bol) b = Double.parseDouble(tf.getText());
//初始化计算结果
double c = 0;
//switch选择运算符号
switch (sign) {
case '+':
c = a + b;
break;
case '-':
c = a - b;
break;
case '*':
c = a * b;
break;
case '/':
c = a / b;
break;
default:
break;
}
//如果没有小数点
if(c==(int)c){
//设置c为整型添加到窗体
tf.setText(Integer.toString((int)c));
}else{
//设置c为浮点型添加到窗体
tf.setText(Double.toString(c));}
//设置为可计算
bol = true;
//把当前值赋给a
a=c;
}
});
依上述方法就可以把计算器做玩,然后去做自己的运算啦~