上一篇簡單實現了計算器的界面,這一篇開始實現功能。
簡要說明
功能的實現主要分了操作數按鈕的監聽事件和操作符按鈕的監聽事件。
另,本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不說了,草草結尾,再見。