Java-计算器(简易版)
生活随笔
收集整理的這篇文章主要介紹了
Java-计算器(简易版)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如圖:
除鍵?:在計算中按下此鍵將清除除存儲器內容外的所有數值和計算符號,即可以重新開始輸入計算.
清除鍵(CE):在計算中按下此鍵將清除除存儲器內容外的上一步內容,即可以重新輸入按CE前輸入的數字(含多位數)或計算符號.
代碼如下:
package calculation4;import java.awt.*; import java.awt.event.*; import javax.swing.*;public class calculation4 extends JFrame {private static final long serialVersionUID = 1L; //實現序列化,serialVersionUID 用來表明實現序列化類的不同版本間的兼容性Container c = getContentPane(); //用于固定寬度并支持響應式布局的容器StringBuilder number1 = new StringBuilder(""); // 儲存第1個數字字符串StringBuilder number2 = new StringBuilder(""); // 儲存第2個數字字符串StringBuilder operator = new StringBuilder(""); // 儲存運算符 StringBuilder result = new StringBuilder(""); // 儲存運算結果JTextField numbershow = new JTextField("0"); // 數字顯示區域,初始顯示為"0"public static void main(String[] args) { // 主方法//除鍵(C):在計算中按下此鍵將清除除存儲器內容外的所有數值和計算符號,即可以重新開始輸入計算.//清除鍵(CE):在計算中按下此鍵將清除除存儲器內容外的上一步內容,即可以重新輸入按CE前輸入的數字(含多位數)或計算符號.calculation4 c1 = new calculation4();c1.setVisible(true);}public calculation4() { // 計算器構造方法setTitle("計算器");setBounds(100, 100, 260, 245);setResizable(false);setLayout(null);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);createNumberShow(); // 創建數字顯示區域createClearButtons();// 創建Backspace,CE,C等三個按鈕createButtonArea(); // 創建數字按鈕區域}private void createNumberShow() { // 創建數字顯示區域的方法numbershow.setHorizontalAlignment(JTextField.RIGHT);numbershow.setBounds(5, 0, 245, 22);numbershow.setEnabled(false);numbershow.setDisabledTextColor(Color.BLACK);c.add(numbershow);}private void createClearButtons() { // 創建Backspace,CE,C等三個按鈕的方法JButton[] clearbutton = new JButton[3];String[] clearbuttontext = { "Backspace", "CE", "C" };for (int i = 0; i < 3; i++) {clearbutton[i] = new JButton();clearbutton[i].setText(clearbuttontext[i]);clearbutton[i].setHorizontalAlignment(SwingConstants.CENTER);clearbutton[i].setMargin(new Insets(0, 0, 0, 0));clearbutton[i].setFont(new java.awt.Font("Arial", 0, 9));clearbutton[i].setForeground(Color.blue);clearbutton[i].setBounds(48 + i * 68, 30, 63, 22);clearbutton[i].setForeground(Color.red);c.add(clearbutton[i]);}clearbutton[0].addActionListener(new ActionListener() {// 為Backspace按鈕添加監聽器public void actionPerformed(ActionEvent e) {if (number1.toString().equals("")) { // 如果未做任何輸入showNumber(numbershow, number1); // 顯示number1} else if (operator.toString().equals("")) { // 如果只輸入了number1number1.deleteCharAt(number1.toString().length() - 1);// 將number1的最后一個字符去掉showNumber(numbershow, number1); // 顯示number1} else if (number2.toString().equals("")) { // 如果只輸入了number1和operatorshowNumber(numbershow, number1); // 不作任何處理,顯示number1} else { // 如果輸入了number1、operator、number2number2.deleteCharAt(number2.toString().length() - 1);// 將number2的最后一個字符去掉showNumber(numbershow, number2); // 顯示number2} }});clearbutton[1].addActionListener(new ActionListener() {// 為CE按鈕添加監聽器public void actionPerformed(ActionEvent e) {if (number1.toString().equals("")) { // 如果未做任何輸入showNumber(numbershow, number1); // 顯示number1} else if (operator.toString().equals("")) { // 如果只輸入了number1number1.setLength(0); // 清除number1showNumber(numbershow, number1); // 顯示number1} else if (number2.toString().equals("")) { // 如果輸入了number1和operatorshowNumber(numbershow, number2); // 不作任何處理,顯示number2} else { // 如果輸入了number1、operator、number2number2.setLength(0); // 清除number2showNumber(numbershow, number2); // 顯示number2} } });clearbutton[2].addActionListener(new ActionListener() {// 為C按鈕添加監聽器public void actionPerformed(ActionEvent e) { // 將所有儲存清零number1.setLength(0);number2.setLength(0);operator.setLength(0);numbershow.setText("0.");result.setLength(0);} });}private void createButtonArea() { // 創建數字按鈕區域的方法JPanel ButtonArea = new JPanel();ButtonArea.setBounds(5, 55, 245, 125);ButtonArea.setLayout(new GridLayout(4, 5, 5, 5));c.add(ButtonArea);JButton[] numberbutton = new JButton[20];String[] numberbuttontext = { "7", "8", "9", "/", "sqrt", "4", "5", "6","*", "%", "1", "2", "3", "-", "1/X","0", "+/-", ".", "+", "=" };for (int i = 0; i <= 19; i++) { // 使用循環為這20個按鈕添加標識numberbutton[i] = new JButton(numberbuttontext[i]);ButtonArea.add(numberbutton[i]);if (i % 5 == 3 || i == 19) {// 操作符按鈕設置為紅色numberbutton[i].setHorizontalAlignment(SwingConstants.CENTER);//文本居中numberbutton[i].setMargin(new Insets(0, 0, 0, 0));//構件在顯示區的上,左,下,右的空白區0numberbutton[i].setFont(new java.awt.Font("Arial", 0, 9));//name表示的是字體的樣式,常用的字體有Times New Roman、Symbol、宋體、楷體等。//style表示的是字體的風格,默認是正常Font.PLAIN,有加粗Font.BLOD,有斜體Font.INTALIC//可以加粗+斜體Font.BLOD + Font.INTALICnumberbutton[i].setForeground(Color.red);} else { // 其它設置為藍色numberbutton[i].setHorizontalAlignment(SwingConstants.CENTER);numberbutton[i].setMargin(new Insets(0, 0, 0, 0));numberbutton[i].setFont(new java.awt.Font("Arial", 0, 9));numberbutton[i].setForeground(Color.blue);}}int[] numbers = { 15, 10, 11, 12, 5, 6, 7, 0, 1, 2 };// 該數組分別代表0-9等數字在numberbuttontext數組中序號for (int i = 0; i <= 9; i++) { // 使用循環為這0-9這十個數字按鈕添加監聽器final String str = String.valueOf(i); //封裝,將括號里面這個 i 的值轉換成一個‘String’類型的值numberbutton[numbers[i]].addActionListener(new ActionListener() {// 為0-9按鈕添加監聽器public void actionPerformed(ActionEvent e) {if (operator.toString().equals("")) { // 沒有輸入operator之前add(number1, str); // 只設置number1的值showNumber(numbershow, number1); // 只顯示number1的值} else { // 輸入operator之后add(number2, str); // 只設置number2的值showNumber(numbershow, number2); // 只顯示number2的值} }}); }numberbutton[16].addActionListener(new ActionListener() { // 為"+/-"按鈕添加監聽器public void actionPerformed(ActionEvent e) {if (operator.toString().equals("")) { // 沒有輸入operator之前add(number1, "+/-"); // 只設置number1的值showNumber(numbershow, number1); // 只顯示number1的值} else { // 輸入operator之后add(number2, "+/-"); // 只設置number2的值showNumber(numbershow, number2); // 只顯示number2的值} }});numberbutton[17].addActionListener(new ActionListener() { // 為"."按鈕添加監聽器public void actionPerformed(ActionEvent e) {if (operator.toString().equals("")) { // 在輸入operator之前,只顯示number1的值add(number1, ".");showNumber(numbershow, number1);} else { // 在輸入operator之后,只顯示number2的值add(number2, ".");showNumber(numbershow, number2); } } });numberbutton[18].addActionListener(new ActionListener() { // 為"+"按鈕添加監聽器public void actionPerformed(ActionEvent e) {operator.setLength(0);operator.append("+"); }});numberbutton[13].addActionListener(new ActionListener() { // 為"-"按鈕添加監聽器public void actionPerformed(ActionEvent e) {operator.setLength(0);operator.append("-");} });numberbutton[8].addActionListener(new ActionListener() { // 為"*"按鈕添加監聽器public void actionPerformed(ActionEvent e) {operator.setLength(0);operator.append("*");}});numberbutton[3].addActionListener(new ActionListener() { // 為"/"按鈕添加監聽器public void actionPerformed(ActionEvent e) {operator.setLength(0);operator.append("/");}});numberbutton[19].addActionListener(new ActionListener() { // 為"="按鈕添加監聽器public void actionPerformed(ActionEvent e) {if (number1.toString().equals("")) {// 當number1為空時showNumber(numbershow, number1);} else if (operator.toString().equals("")) { // 當number1不為空,而operator為空時showNumber(numbershow, number1);} else if (number2.toString().equals("")) {// 當number1、operator均不為空,而number2為空時 switch (operator.toString()) { case ("+"): {number2.append(number1.toString());//1=2double d = Double.parseDouble(number1.toString())+ Double.parseDouble(number2.toString());result.setLength(0);result.append(d);showNumber(numbershow, result);number1.setLength(0);number1.append(d);}break;case ("-"): {number2.append(number1.toString());double d = Double.parseDouble(number1.toString())- Double.parseDouble(number2.toString());result.setLength(0);result.append(d);showNumber(numbershow, result);number1.setLength(0);number1.append(d);}break;case ("*"): {number2.append(number1.toString());double d = Double.parseDouble(number1.toString())* Double.parseDouble(number2.toString());result.setLength(0);result.append(d);showNumber(numbershow, result);number1.setLength(0);number1.append(d);}break;case ("/"): {number2.append(number1.toString());double d = Double.parseDouble(number1.toString())/ Double.parseDouble(number2.toString());result.setLength(0);result.append(d);showNumber(numbershow, result);number1.setLength(0);number1.append(d);}break;}} else { // 當number1、operator、number2均不為空時switch (operator.toString()) { case ("+"): {double d = Double.parseDouble(number1.toString())+ Double.parseDouble(number2.toString());result.setLength(0);result.append(d);showNumber(numbershow, result);number1.setLength(0);number1.append(d);}break;case ("-"): {double d = Double.parseDouble(number1.toString())- Double.parseDouble(number2.toString());result.setLength(0);result.append(d);showNumber(numbershow, result);number1.setLength(0);number1.append(d);}break;case ("*"): {double d = Double.parseDouble(number1.toString())* Double.parseDouble(number2.toString());result.setLength(0);result.append(d);showNumber(numbershow, result);number1.setLength(0);number1.append(d);}break;case ("/"): {double d = Double.parseDouble(number1.toString())/ Double.parseDouble(number2.toString());result.setLength(0);result.append(d);showNumber(numbershow, result);number1.setLength(0);number1.append(d);}break;}}}});numberbutton[14].addActionListener(new ActionListener() { // 為"1/x"按鈕添加監聽器public void actionPerformed(ActionEvent e) {if (number1.toString().equals("")) { // 沒有輸入number1時numbershow.setText("輸入非法0");} else if (operator.toString().equals("")) { // 輸入了number1,但沒有輸入operatorif (Double.parseDouble(number1.toString()) == 0) { // 如果number1的值為零numbershow.setText("除數不能為零");} else { // 如果number1的值不為零double d = 1 / (Double.parseDouble(number1.toString()));number1.setLength(0);number1.append(d); // 將number1的值開放并存儲showNumber(numbershow, number1);}} else if (number2.toString().equals("")) { // 輸入了number1、operator,但沒有輸入number2double d = 1 / (Double.parseDouble(number1.toString()));number2.append(d);// 將number1的值開放并存儲showNumber(numbershow, number2);} else { // 輸入了number1、operator,number2double d = 1 / (Double.parseDouble(number2.toString()));number2.setLength(0);number2.append(d);// 將number2的值開放并存儲showNumber(numbershow, number2);}}});numberbutton[9].addActionListener(new ActionListener() { // 為"%"按鈕添加監聽器public void actionPerformed(ActionEvent e) {if (number1.toString().equals("")) { // 沒有輸入number1時numbershow.setText("輸入非法0");} else if (operator.toString().equals("")) { // 輸入了number1,但沒有輸入operatorif (Double.parseDouble(number1.toString()) == 0) { // 如果number1的值為零numbershow.setText("0");} else { // 如果number1的值不為零double d = (Double.parseDouble(number1.toString())/100);number1.setLength(0);number1.append(d); // 將number1的值開放并存儲showNumber(numbershow, number1);}} else if (number2.toString().equals("")) { // 輸入了number1、operator,但沒有輸入number2double d = (Double.parseDouble(number1.toString())/100);number2.append(d);// 將number1的值開放并存儲showNumber(numbershow, number2);} else { // 輸入了number1、operator,number2double d = (Double.parseDouble(number2.toString())/100);number2.setLength(0);number2.append(d);// 將number2的值開放并存儲showNumber(numbershow, number2);}}});numberbutton[4].addActionListener(new ActionListener() { // 為"sqrt"按鈕添加監聽器public void actionPerformed(ActionEvent e) {if (number1.toString().equals("")) {// 沒有輸入number1時showNumber(numbershow, number1);} else if (operator.toString().equals("")) {// 輸入了number1,但沒有輸入operatorif (Double.parseDouble(number1.toString()) < 0) {// number1小于0numbershow.setText("函數輸入無效");} else {// number1大于0double d = Math.sqrt(Double.parseDouble(number1.toString()));number1.setLength(0);number1.append(d);// 將number1的值開放并存儲showNumber(numbershow, number1);}} else if (number2.toString().equals("")) {// 輸入了number1、operator,但沒有輸入number2double d = Math.sqrt(Double.parseDouble(number1.toString()));number2.append(d);// 將number1的值開放并存儲showNumber(numbershow, number2);} else {// 輸入了number1、operator、number2double d = Math.sqrt(Double.parseDouble(number2.toString()));number2.setLength(0);number2.append(d);// 將number2的值開放并存儲showNumber(numbershow, number2);}}});}public void add(StringBuilder s1, String s2) { // 定義按鈕輸入后數字字符串變化的方法if (s2.equals("+/-")) {// 定義輸入"+/-"后數字字符串的變化if (s1.toString().equals("") || s1.toString().equals("0")) {// 如果數字字符串為空或者0,那么不發生變化s1.append("");} else {// 如果數字字符串不為空也不為0,那么在數字字符串前增加或刪除"-"字符if (s1.toString().startsWith("-")) {s1.deleteCharAt(0);} else {s1.insert(0, "-");}}}if (s2.equals(".")) {// 定義輸入"."后數字字符串的變化if (s1.toString().indexOf(".") == -1) {// 查找數字字符串中是否含有"."字符,如果沒有則執行以下代碼if (s1.toString().equals("")) {// 如果數字字符串為空,那么將數字字符串設置為"0."s1.setLength(0);s1.append("0");} else {s1.append(".");}} else {// 如果有,則不發生變化s1.append("");}}if (s2.equals("0")) {// 定義輸入"0"后數字字符串的變化if (s1.toString().equals("0")) {// 當數字的字符串為"0"時,不發生變化s1.append("");} else {// 當數字的字符串吧為"0"時,在其字符串后增加"0"s1.append("0");}}for (int i = 1; i < 10; i++) {// 通過循環,定義輸入1-9后數字字符串的變化String str = String.valueOf(i);if (s2.equals(str)) {// 定義輸入1-9后數字字符串的變化if (s1.toString().equals("0")) {s1.setLength(0);s1.append(str);} elses1.append(str);}}}public void showNumber(JTextField j, StringBuilder s) {// 定義數字顯示區域如何顯示數字字符串的方法if (s.toString().equals("") == true || s.toString().equals("0") == true) {j.setText("0.");} else if (s.toString().indexOf(".") == -1) {j.setText(s.toString() + ".");} else {j.setText(s.toString());}}}總結
以上是生活随笔為你收集整理的Java-计算器(简易版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5月23日
- 下一篇: 2021届定远三中高考成绩查询,定远各中