用java語言製作一個簡易的計算器
import javax.swing.JFrame;//匯入窗體型別Jframe
import java.awt.FlowLayout;//匯入流式佈局
import javax.swing.JButton;//匯入按鈕型別
import javax.swing.JPanel;//匯入面板佈局
import javax.swing.JTextField;
import javax.swing.JOptionPane;//匯入訊息框類
import java.awt.GridLayout;//匯入網格佈局
import java.awt.BorderLayout;//匯入邊框佈局
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;//匯入監聽介面
public class Counter {
/**
* 計算器 :
*/
public static void main(String[] args) {
// 建立窗體
JFrame frm = new JFrame(“計算器”);
// 窗體北邊放置單行文字框
JTextField txtNum = new JTextField(“0.0”);
frm.add(txtNum, BorderLayout.NORTH);// 通過邊框佈局,將文字框物件放置窗體的北側
GridLayout layout = new GridLayout(5, 4);
JPanel panel = new JPanel();
panel.setLayout(layout);
// 建立監聽物件(耳朵) ActionListener listener = new ActionListener() { String op = ""; // 本次運算子 String upOp = "",oldOp=""; // 上一次運算子, oldOp儲存的舊運算子 double sum = 0,oldSum=0; // 四則混合運算累計結果,oldSum 儲存舊的運算結果 boolean isOne = true, isOk = true;// 是否是第一個運算數 String strNum = ""; // 做0~9數字累加的 double n = 0.0; // 運算數 @Override public void actionPerformed(ActionEvent e) { String val = e.getActionCommand(); // 獲取當前點選者的顯示文字 // 判斷點選的按鈕顯示文字是0~9的字串嗎? if ("0".equals(val) || "1".equals(val) || "2".equals(val) || "3".equals(val) || "4".equals(val) || "5".equals(val) || "6".equals(val) || "7".equals(val) || "8".equals(val) || "9".equals(val)) { strNum = strNum + val;// 數字累加 n = Double.parseDouble(strNum); txtNum.setText(n + "");// 顯示到文字框 } else { // 此時有可能是C,CE,+,-,*,/等其他運算子 if ("C".equals(val)) { // 點選清除鍵 txtNum.setText("0"); // 文字框顯示0 strNum = ""; // 數字累加字串回覆初始值 n = 0; // 運算數清0 sum=0; // 累加和清0 isOne = true;//預設是第1個數 op=""; //本次運算子清"" upOp=""; //上次運算子清"" } else { // 實現+,-,*,/四則混合運算 op = val; //獲得本次運算子 if( "*".equals(op) || "/".equals(op)) { //本次運算子是*或/時,優先運算 if(isOk) {//當實現乘除發首個數字時:結果=數 oldSum = sum; //保留已有運算結果 oldOp = upOp; //保留已有的運算子 sum = n; isOk=false; isOne = false; }else {//當實現乘除法時,非首個數字時:結果=結果*數 if ("*".equals(upOp)) sum = sum * n; else if ("/".equals(upOp)) sum = sum / n; } }else { if (isOne) { sum = n;// 第一個運算數無需任何運算 isOne = false;// 第一個運算數結束,其他運算數isOne=false } else { if ("+".equals(upOp)) sum = sum + n; else if ("-".equals(upOp)) sum = sum - n; else if ("*".equals(upOp)) sum = sum * n; else if ("/".equals(upOp)) sum = sum / n; } //乘除運算執行後,累加舊的計算結果 if("+".equals(oldOp)) { sum = oldSum + sum; }else if("-".equals(oldOp)) { sum = oldSum - sum; } oldSum = 0; oldOp=""; isOk = true; } upOp = op; //本次運算結束,這個運算子就變成了上一次的運算子 txtNum.setText( sum+"" ); strNum="";//清楚字串累加的舊資料,回覆初始值"" } } } }; // 按鈕顯示文字字串陣列 String[] info = { "CE", "C", "+/-", "Exit", "7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", "*", "0",".", "=", "/" }; // 通過迴圈放置20個按鈕到面板 for (int i = 0; i < 20; i++) { JButton btn = new JButton(info[i]); btn.addActionListener(listener); panel.add(btn); } frm.add(panel, BorderLayout.CENTER);// 通過邊框佈局,將面板放置窗體中間 // 設定窗體顯示相關的屬性: frm.setSize(300, 220);// 窗體寬300,高200 frm.setLocation(700, 50);// 窗體頂點座標x=700,y=50. 預設最左上角是0.0點 frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 點選X按鈕關閉窗體 frm.setVisible(true);// 設定窗體可見 }
}
其執行結果為: