上一篇简单实现了计算器的界面,这一篇开始实现功能。
简要说明
功能的实现主要分了操作数按钮的监听事件和操作符按钮的监听事件。
另,本demo只作为入门学习使用,并非完善的计算器,所以有许多的bug,待后续完善。
变量声明
在上一篇界面的基础上继续编写代码。
首先添加了如下变量在自己的Panel类中
public static double result; // 计算结果
public static String command; //操作符,计算命令
public static boolean start; //标志,标识是不是一个等式的开始(一个等式开始需要清除上一次的显示结果)
因为我将各个类拆分到了不同的包中,所以将变量设置成了共有的静态变量。
在CaculatorPanel的构造方法中进行初始化
//初始化变量
result=0;
command="=";
start=true;
操作符按钮监听事件
package CaculatorActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import CaculatorFrame.CaculatorPanel;
public class NumberActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
// 获得输入的内容
String input = e.getActionCommand(); // 获得按钮的内容
if (CaculatorPanel.start) {// 等式开始
CaculatorPanel.display.setText("");// 清除上一次显示的结果
CaculatorPanel.start = false;
}
// 设置display显示连续输入的数字
CaculatorPanel.display.setText(CaculatorPanel.display.getText() + input);
}
}
操作符按钮监听事件
package CaculatorActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import CaculatorFrame.CaculatorPanel;
public class OperaActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
//获得输入的操作符
String c=e.getActionCommand();
if(CaculatorPanel.start) {
CaculatorPanel.command=c; //存下操作符
}else {
if(CaculatorPanel.command.equals("+")) {
CaculatorPanel.result+=Double.parseDouble(CaculatorPanel.display.getText());
}else if(CaculatorPanel.command.equals("-")) {
CaculatorPanel.result-=Double.parseDouble(CaculatorPanel.display.getText());
}else if(CaculatorPanel.command.equals("*")) {
CaculatorPanel.result*=Double.parseDouble(CaculatorPanel.display.getText());
}else if(CaculatorPanel.command.equals("/")) {
CaculatorPanel.result/=Double.parseDouble(CaculatorPanel.display.getText());
}else if(CaculatorPanel.command.equals("=")) {
CaculatorPanel.result=Double.parseDouble(CaculatorPanel.display.getText());
}
//打印结果
CaculatorPanel.display.setText(""+CaculatorPanel.result);
CaculatorPanel.command=c;
CaculatorPanel.start=true;
}
}
}
好的,bug不说了,草草结尾,再见。