亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java模仿windows計算器示例

2019-11-26 15:30:37
字體:
來源:轉載
供稿:網友

這個計算器的界面模仿Windows自帶的簡易計算器,包括交互界面和和對各種輸入的響應。目前尚未實現菜單欄和記憶類按鈕的功能

復制代碼 代碼如下:

import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.plaf.basic.BasicBorders;

public class Calculator extends JFrame {
 private static final long serialVersionUID = 1L;
 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) {// 主方法
  Calculator c1 = new Calculator();
  c1.setVisible(true);
 }

 public Calculator() {// 計算器構造方法
  setTitle("計算器");
  setBounds(100, 100, 260, 245);
  setResizable(false);
  setLayout(null);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  createMenuBar();// 創建菜單欄
  createNumberShow();// 創建數字顯示區域
  createMemoShow();// 創建記憶顯示
  createClearButtons();// 創建Backspace,CE,C等三個按鈕
  createButtonArea();// 創建數字按鈕區域
 }

 private void createMenuBar() {// 創建菜單欄的方法
  JMenuBar menubar = new JMenuBar();
  setJMenuBar(menubar);
  JMenu menu1 = new JMenu("編輯");
  JMenu menu2 = new JMenu("查看");
  JMenu menu3 = new JMenu("幫助");
  menubar.add(menu1);
  menubar.add(menu2);
  menubar.add(menu3);
  JMenuItem menu1item1 = new JMenuItem("復制");
  JMenuItem menu1item2 = new JMenuItem("粘貼");
  JMenuItem menu2item1 = new JMenuItem("標準型");
  JMenuItem menu2item2 = new JMenuItem("科學型");
  JMenuItem menu2item3 = new JMenuItem("科學分組");
  JMenuItem menu3item1 = new JMenuItem("幫助主題");
  JMenuItem menu3item2 = new JMenuItem("關于計算器");
  menu1.add(menu1item1);
  menu1.add(menu1item2);
  menu2.add(menu2item1);
  menu2.add(menu2item2);
  menu2.add(menu2item3);
  menu3.add(menu3item1);
  menu3.add(menu3item2);
 }

 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 createMemoShow() {// 創建記憶顯示的方法
  JTextField memoshow = new JTextField();
  memoshow.setEditable(false);
  memoshow.setBounds(10, 30, 28, 22);
  memoshow.setBorder(new BasicBorders.FieldBorder(Color.black,
    Color.black, Color.white, Color.white));
  c.add(memoshow);
 }

 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按鈕添加監聽器
     @Override
     public void actionPerformed(ActionEvent e) {
      if (number1.toString().equals("")) {// 如果未做任何輸入
       showNumber(numbershow, number1);// 顯示number1
      } else if (operator.toString().equals("")) {// 如果只輸入了number1
       number1.deleteCharAt(number1.toString().length() - 1);// 將number1的最后一個字符去掉
       showNumber(numbershow, number1);// 顯示number1
      } else if (number2.toString().equals("")) {// 如果只輸入了number1和operator
       showNumber(numbershow, number1);// 不作任何處理,顯示number1
      } else {// 如果輸入了number1、operator、number2
       number2.deleteCharAt(number2.toString().length() - 1);// 將number2的最后一個字符去掉
       showNumber(numbershow, number2);// 顯示number2
      }
     }
    });

  clearbutton[1].addActionListener(new ActionListener() {// 為CE按鈕添加監聽器
     @Override
     public void actionPerformed(ActionEvent e) {
      if (number1.toString().equals("")) {// 如果未做任何輸入
       showNumber(numbershow, number1);// 顯示number1
      } else if (operator.toString().equals("")) {// 如果只輸入了number1
       number1.setLength(0);// 清除number1
       showNumber(numbershow, number1);// 顯示number1
      } else if (number2.toString().equals("")) {// 如果輸入了number1和operator
       showNumber(numbershow, number2);// 不作任何處理,顯示number2
      } else {// 如果輸入了number1、operator、number2
       number2.setLength(0);// 清除number2
       showNumber(numbershow, number2);// 顯示number2
      }
     }
    });

  clearbutton[2].addActionListener(new ActionListener() {// 為C按鈕添加監聽器
     @Override
     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, 6, 5, 5));
  c.add(ButtonArea);

  JButton[] numberbutton = new JButton[24];
  String[] numberbuttontext = { "MC", "7", "8", "9", "/", "sqrt", "MR",
    "4", "5", "6", "*", "%", "MS", "1", "2", "3", "-", "1/X", "M+",
    "0", "+/-", ".", "+", "=" };
  for (int i = 0; i < 24; i++) {// 使用循環為這24個按鈕添加標識
   numberbutton[i] = new JButton(numberbuttontext[i]);
   ButtonArea.add(numberbutton[i]);
   if (i % 6 == 0 || i % 6 == 4 || i == 23) {// 操作符按鈕設置為紅色
    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.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 = { 19, 13, 14, 15, 7, 8, 9, 1, 2, 3 };// 該數組中的數字分別代表0-9等數字在numberbuttontext數組中序號
  for (int i = 0; i <= 9; i++) { // 使用循環為這0-9這十個數字按鈕添加監聽器
   final String str = String.valueOf(i);
   numberbutton[numbers[i]].addActionListener(new ActionListener() {// 為0-9按鈕添加監聽器
      @Override
      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[20].addActionListener(new ActionListener() { // 為"+/-"按鈕添加監聽器
     @Override
     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[21].addActionListener(new ActionListener() { // 為"."按鈕添加監聽器
     @Override
     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[22].addActionListener(new ActionListener() { // 為"+"按鈕添加監聽器
     @Override
     public void actionPerformed(ActionEvent e) {
      operator.setLength(0);
      operator.append("+");
     }
    });

  numberbutton[16].addActionListener(new ActionListener() { // 為"-"按鈕添加監聽器
     @Override
     public void actionPerformed(ActionEvent e) {
      operator.setLength(0);
      operator.append("-");
     }
    });

  numberbutton[10].addActionListener(new ActionListener() { // 為"*"按鈕添加監聽器
     @Override
     public void actionPerformed(ActionEvent e) {
      operator.setLength(0);
      operator.append("*");
     }
    });

  numberbutton[4].addActionListener(new ActionListener() { // 為"/"按鈕添加監聽器
     @Override
     public void actionPerformed(ActionEvent e) {
      operator.setLength(0);
      operator.append("/");
     }
    });

  numberbutton[23].addActionListener(new ActionListener() { // 為"="按鈕添加監聽器
     @Override
     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());
        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;
       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[17].addActionListener(new ActionListener() { // 為"1/x"按鈕添加監聽器
     @Override
     public void actionPerformed(ActionEvent e) {
      if (number1.toString().equals("")) {// 沒有輸入number1時
       numbershow.setText("除數不能為零");
      } else if (operator.toString().equals("")) {// 輸入了number1,但沒有輸入operator
       if (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,但沒有輸入number2
       double d = 1 / (Double.parseDouble(number1
         .toString()));
       number2.append(d);// 將number1的值開放并存儲
       showNumber(numbershow, number2);
      } else {// 輸入了number1、operator,number2
       double d = 1 / (Double.parseDouble(number2
         .toString()));
       number2.setLength(0);
       number2.append(d);// 將number2的值開放并存儲
       showNumber(numbershow, number2);
      }
     }
    });

  numberbutton[11].addActionListener(new ActionListener() { // 為"%"按鈕添加監聽器
     @Override
     public void actionPerformed(ActionEvent e) {
      // 暫時空缺
     }
    });

  numberbutton[5].addActionListener(new ActionListener() { // 為"sqrt"按鈕添加監聽器
     @Override
     public void actionPerformed(ActionEvent e) {
      if (number1.toString().equals("")) {// 沒有輸入number1時
       showNumber(numbershow, number1);
      } else if (operator.toString().equals("")) {// 輸入了number1,但沒有輸入operator
       if (Double.parseDouble(number1.toString()) < 0) {// number1小于0
        numbershow.setText("函數輸入無效");
       } else {// number1大于0
        double d = Math.sqrt(Double.parseDouble(number1
          .toString()));
        number1.setLength(0);
        number1.append(d);// 將number1的值開放并存儲
        showNumber(numbershow, number1);
       }
      } else if (number2.toString().equals("")) {// 輸入了number1、operator,但沒有輸入number2
       double d = Math.sqrt(Double.parseDouble(number1
         .toString()));
       number2.append(d);// 將number1的值開放并存儲
       showNumber(numbershow, number2);
      } else {// 輸入了number1、operator、number2
       double 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);
    } else
     s1.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());
  }
 }
}



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国内精品视频在线| 国产欧美久久久久久| 美女视频黄免费的亚洲男人天堂| 另类天堂视频在线观看| 91av免费观看91av精品在线| 亚洲成人av片在线观看| 91精品久久久久久久久久另类| 欧美激情在线视频二区| 亚洲国产成人精品久久久国产成人一区| 色综久久综合桃花网| 一道本无吗dⅴd在线播放一区| 欧美性xxxxx极品娇小| 色爱精品视频一区| 久久国产精品免费视频| 日韩中文字幕在线精品| 九色精品免费永久在线| 久久久999精品视频| 欧美日本在线视频中文字字幕| 国产欧美久久一区二区| 亚洲永久免费观看| 97欧美精品一区二区三区| 在线看日韩欧美| 国产性色av一区二区| 色综合老司机第九色激情| 91在线视频免费| 日本三级韩国三级久久| 91免费看片在线| 亚洲国产精品成人av| 国产精品一久久香蕉国产线看观看| 91久久精品久久国产性色也91| 综合av色偷偷网| 亚洲天堂精品在线| 日韩视频免费中文字幕| 国产欧美日韩高清| 一区二区三区久久精品| 91欧美视频网站| www.久久色.com| 欧美在线亚洲一区| 国产亚洲精品日韩| 欧美最顶级的aⅴ艳星| 97精品免费视频| 国产精品久久久久久久久久久久| 亚洲欧美成人精品| 萌白酱国产一区二区| 精品久久久一区二区| 亚洲一区二区在线| 亚洲精品久久久久久下一站| 亚洲国产91色在线| 在线观看精品自拍私拍| 2019日本中文字幕| 久久久久久免费精品| 亚洲精品二三区| 91手机视频在线观看| 日韩欧美在线观看| 国产成人精品午夜| 国产主播喷水一区二区| 亚洲第一偷拍网| 日韩欧中文字幕| 中文字幕日韩专区| 九色成人免费视频| 亚洲激情视频在线观看| 91九色国产社区在线观看| 伊人激情综合网| 亚洲成人三级在线| 91在线视频九色| 国产精品白丝av嫩草影院| 亚洲男人天堂九九视频| 亚洲第一页自拍| 欧美综合在线观看| 久久久久久久久久久亚洲| 国产精品人成电影在线观看| 欧美日韩激情视频8区| 久久精品2019中文字幕| 九九精品在线视频| 国产中文日韩欧美| 精品久久久久久久久国产字幕| 精品国产一区二区三区久久| 欧美性少妇18aaaa视频| 7777kkkk成人观看| 国产精品美女www爽爽爽视频| 综合av色偷偷网| 91久久在线视频| 国产69久久精品成人看| 欧美日本亚洲视频| 日韩在线观看免费全| 欧美日韩在线免费观看| 日韩资源在线观看| 日韩电影在线观看免费| 日韩av在线免费观看| 成人激情视频免费在线| 亚洲精品一区在线观看香蕉| 欧美激情一区二区久久久| 亚洲久久久久久久久久久| 美女国内精品自产拍在线播放| 亚洲欧美三级在线| 久久精品91久久香蕉加勒比| 伊人久久久久久久久久久久久| 国产区精品在线观看| 91精品视频免费看| 亚洲精品久久在线| 成人免费视频a| 91sao在线观看国产| 裸体女人亚洲精品一区| 国产精品444| 日韩精品免费在线播放| 福利精品视频在线| 久久99热这里只有精品国产| 伊人久久久久久久久久久久久| 精品爽片免费看久久| 性夜试看影院91社区| 久久久久久久久久久网站| 欧美高清无遮挡| 欧美激情视频一区二区| 国产精品第8页| 青青a在线精品免费观看| 亚洲香蕉av在线一区二区三区| 亚洲精品suv精品一区二区| 亚洲欧美日韩在线一区| 国产精品第一第二| 亚洲国产精品va| 国产精品久久久久久久久久小说| 日韩高清人体午夜| 国产精品成熟老女人| 粉嫩av一区二区三区免费野| 日韩美女免费观看| 日韩中文字幕在线看| 中文字幕欧美视频在线| 亚洲成人网久久久| 亚洲国产精品va在线观看黑人| 国产精品一二区| 欧美性高潮在线| 日本国产高清不卡| 97激碰免费视频| 亚洲福利视频网| 久久成人一区二区| 日韩av不卡电影| 在线性视频日韩欧美| 欧美日韩精品在线观看| 午夜精品美女自拍福到在线| 亚洲欧美综合精品久久成人| 成人两性免费视频| 中文字幕日韩欧美精品在线观看| 亚洲欧美国产精品久久久久久久| 精品国产999| 色先锋资源久久综合5566| 中文字幕日韩欧美精品在线观看| 亚洲高清在线观看| 亚洲男女自偷自拍图片另类| 国产精品久久久久久久久粉嫩av| 国产精品最新在线观看| 国产精品中文字幕在线观看| 久久久久久av| 日韩美女视频中文字幕| 9.1国产丝袜在线观看| 国产亚洲人成a一在线v站| 精品国产一区二区在线| 久久久视频免费观看| 91亚洲精品视频| 国产精品偷伦免费视频观看的| 午夜精品久久久久久久白皮肤| 免费成人高清视频| 伊人激情综合网| 国产97色在线|日韩| 精品久久久在线观看|