亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java gui怎么實現計算器小程序

發布時間:2022-04-07 15:57:46 來源:億速云 閱讀:124 作者:iii 欄目:編程語言

這篇“java gui怎么實現計算器小程序”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“java gui怎么實現計算器小程序”文章吧。

效果圖 :

java gui怎么實現計算器小程序

代碼:

package gui;
 
 
/**
 * 導入所需要的包
 **/
import java.awt.*;      //  這個是java的gui編程里面一個很重要的包
import java.awt.event.*;      //  用來處理事件所需要
import java.util.Stack;        //  棧 , 我用來處理運算的
 
 
public class Calculator extends Frame implements ActionListener{
    /**  
     * 先聲明一個公共類叫Calculator , 繼承自Frame類 , 實現ActionListener接口功能  
     **/
    
 
 private static final long serialVersionUID = 1L;  // 這個是用來控制版本的序列化  
 int frame_width = 1000,frame_height = 400;  //設置整個框架的長寬 
 Panel panel_textfield,panel_number,panel_op,panel_other;  // 整個計算器布局我把它分成兩個面板 , 一個是上面的輸入框區 , 一個是下面的按鈕區 , 然后按鈕區又分成了左邊和右邊兩個區 , 所以有三個panel  
 Button [] number_buttons;  // 聲明數字按鈕(也就是上面說的左邊區)  
 Button [] op_buttons;      // 聲明操作符按鈕(也就是上面說的右邊區)  
 TextField textfield;        // 輸入框  
 
        public Calculator() {
  super("計算器");    // 完成實例域參數的初始化,調用構造器的語句只能作為另一個構造器(通常指的是子類構造器)的第一條語句出現  
  init();       // 自己寫的初始化方法  
  setLayout();   // 設置布局管理方式 
  setBackground();       // 設置背景 
  setBounds();         // 設置位置  
  setFonts();          // 設置字體 
  addButtons();      // 添加按鈕
  textfield.setEditable(false);    // 設置輸入框為不可手動編輯 , 只能通過按鈕輸入  */
  addWindowListener  // 添加一個窗口監聽器,便于按下關閉按鈕時能關閉窗口 , 否則只能在ide里面停止調試來關閉程序
        (
            new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            }
        );
  setVisible(true);   // 設置框架為可見,不然畫了框你也看不見...一定要放在最后面,放在前面的話,
后面對窗體有改動得縮放拉伸一下窗體進行窗體重繪才能出現效果 , 我在這里卡了很久.... 
  
 }
 
        public void init() {      
  panel_textfield = new Panel();         // 實例化一個panel 
  panel_number = new Panel();            // 實例化一個panel 
  panel_op = new Panel();                // 實例化一個panel 
  panel_other = new Panel();             // 實例化一個panel  
  textfield = new TextField(frame_width);// 實例化一個文本輸入框  
  setResizable(false);                   // 設置整個窗體為不可縮放拉伸  
  
  add(panel_textfield);                 // 往窗體中添加輸入框面板 
  add(panel_other);                     // 往窗體中添加按鈕面板  
  
  panel_textfield.add(textfield);       // 在輸入框面板中添加輸入框  
  panel_other.add(panel_number);        // 在下面面板中添加數字按鈕面板  
  panel_other.add(panel_op);            // 在下面面板中添加操作符按鈕面板  
 }
 

public void setLayout() {
  setLayout(new GridLayout(2,1,4,4));       // 設置窗體布局方式為網格布局,2*1的網格,網格之間間距為4個像素  
  panel_textfield.setLayout(null);       // 輸入框面板就一個組件,所以設置null  
  panel_other.setLayout(new GridLayout(1,2,4,4));  // 下面面板因為分成左邊的數字區和右邊的操作符區,所以設置1*2的網格布局方式,間距4個像素  
  panel_number.setLayout(new GridLayout(5,3,4,4));  //  數字區布局設置為5*3的網格布局  
  panel_op.setLayout(new GridLayout(3,1,4,4));  // 操作符區設置為3*1的網格布局方式  
 }
 
 
        public void setBackground() {  // 設置背景,沒什么好說的....
  panel_textfield.setBackground(Color.red);  
  panel_number.setBackground(Color.green);
  panel_op.setBackground(Color.blue);
 }
 
 
        public void setBounds() {   // 設置組件位置,沒什么好說的.... 
  setBounds(0, 0, frame_width, frame_height);
  textfield.setBounds(0, 0, frame_width, frame_height / 2);
 }
 
 
        public void addButtons() {
  String [] titles1 = {"/", "*", "-",   // 數字區按鈕的label值 
       "7", "8", "9",
       "4", "5", "6",
       "1", "2", "3",
       "0", ".", "c"};
  String [] titles2 = {"x", "+", "="};   // 操作符區按鈕的label值  
  number_buttons = new Button[15];   // 申請15個按鈕對象  
  op_buttons = new Button[3];        // 申請3個按鈕對象  
  
  for(int i = 0; i < this.number_buttons.length; i++) {
   number_buttons[i] = new Button(titles1[i]);
   panel_number.add(number_buttons[i]);  //  往數字區中添加按鈕  
   number_buttons[i].addActionListener(this);  // 按鈕的事件監聽器,處理方法為this,也就是下面重載的actionPerformed()方法,這個方法必須被重載
  }
  
  for(int i = 0; i < this.op_buttons.length; i++) {
   op_buttons[i] = new Button(titles2[i]);   // 往操作符區中添加按鈕
   panel_op.add(this.op_buttons[i]);
   op_buttons[i].addActionListener(this);   // 按鈕的事件監聽器,處理方法為this,也就是下面重載的actionPerformed()方法,這個方法必須被重載
  }
  
 }
 
 
@Override   // 對ActionListener接口的此方法進行重載 
 public void actionPerformed(ActionEvent e) {
  Button button = (Button) e.getSource();   // 獲得按鈕來源
 
  /**
   * 如果是數字鍵和操作符 , 則直接顯示
   **/
  for(int i = 0; i < 14; i++) { 
   if(button == number_buttons[i] || button == op_buttons[1]) {
    textfield.setText(textfield.getText() + button.getLabel());
    return;
   }
  }
  
  /**
   * 如果是c,則清空
   **/
  if(button == number_buttons[14]) {
   textfield.setText("");
   return;
  }
  
  /**
   * 如果是回退按鈕 , 則清除最近的一個字符
   **/
  if(button == op_buttons[0]) {
   String s = textfield.getText();
   if(s.length() > 0)
    textfield.setText(s.substring(0, s.length() - 1));
   return;
  }
  
  
  /**
   * 如果是=,則計算結果
   **/
  if(button == op_buttons[2]) {
   textfield.setText(getResult());
   return;
  }
 }
 
 
 public String getResult() {
  
  /**
   * 計算結果
   **/
  String s = textfield.getText();   // 先獲得輸入的字符串
  String num = "";
  Stack<Double> nums = new Stack<Double>();
  Stack<String> ops = new Stack<String>();
  
  /**
   * 利用regex分離操作數和操作符,然后用棧進行結果的計算
   **/
  for(int i = 0; i < s.length(); i++) {
   String temp = s.charAt(i) + "";
   if(temp.matches("[0-9]") || temp.matches("[.]")) {
    num += temp;
   }
   else if(temp.matches("[*+]") || temp.matches("[-]") | temp.matches("[/]")) {
    if(!num.equals(""))
     nums.push(Double.parseDouble(num));
    if(ops.isEmpty() || cmpLevel(temp,ops.peek())) {
     ops.push(temp);
    }
    else {
     Double num1 = nums.pop();
     Double num2 = nums.pop();
     String op2 = ops.pop();
     nums.push(compute(num2,num1,op2));
     i--;
    } 
    num = "";
   }
  }
 
  while(!ops.isEmpty()) {
   
   if(!num.equals("")) {
    nums.push(compute(nums.pop(),Double.parseDouble(num),ops.pop()));
    num = "";
   }
   else {
    Double num1 = nums.pop();
    Double num2 = nums.pop();
    nums.push(compute(num2,num1,ops.pop()));
   }
   
  }
  return nums.pop().toString();
 }
 
  /**  
   * 將兩個操作數根據操作符進行運算 , 返回結果  
   ** /
    public Double compute(double num1,double num2,String op) {
  if(op.equals("+")) {
   return num1 + num2;
  }
  else if(op.equals("-")) {
   return num1 - num2;
  }
  else if(op.equals("*")) {
   return num1 * num2;
  }
  else
   return num1 / num2;
 }
 
 /**
  *  比較兩個操作符的優先級  
  **/
 public boolean cmpLevel(String s1,String s2) {
  if(s1.equals("+") || s1.equals("-")) {
   return false;
  }
  else {
   if(s2.equals("+") || s2.equals("-"))
    return true;
   return false;
  }
 }
 
 /**  
  * 設置每個組件的字體  
  **/
 public void setFonts() {
  panel_number.setFont(new Font("微軟雅黑",Font.PLAIN,24));
  panel_op.setFont(new Font("微軟雅黑",Font.PLAIN,24));
  panel_other.setFont(new Font("微軟雅黑",Font.PLAIN,24));
  textfield.setFont(new Font("微軟雅黑",Font.PLAIN,48));
 }
 
 /**
  *  main方法  
  **/
 public static void main(String [] args) {
  new Calculator();
 }
 
}

以上就是關于“java gui怎么實現計算器小程序”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广汉市| 永嘉县| 临沭县| 吉水县| 墨竹工卡县| 壤塘县| 鄂托克前旗| 新蔡县| 通许县| 旌德县| 彩票| 保亭| 马龙县| 横峰县| 白水县| 扶绥县| 宁晋县| 资溪县| 琼结县| 当涂县| 伊川县| 冕宁县| 中西区| 静乐县| 仙游县| 安溪县| 衡阳县| 红原县| 岑巩县| 纳雍县| 永平县| 合山市| 武义县| 房山区| 景谷| 田东县| 聂荣县| 兴文县| 什邡市| 庄河市| 阿拉尔市|