(1)主要功能:實現簡單的加、減、乘、除等雙眼運算,和開平方、百分數等單目運算
( 2)輔助功能:按鈕“C”實作清空文字方塊;按鈕“←”實作退格,刪除文字方塊中最右邊的一個字元
建立“面板物件”,並設定其佈局管理方式為5行4列的GridLayout佈局方式,以用於容納20個按鈕。文字方塊和容納20個按鈕組件的面板則使用邊界佈局方式分別將其佈局到窗體BorderLayout.NORTH和中央位置BorderLayout.CENTER;
接著設定20個按鈕的文字內容:聲明並創建String型數組,存放20個按鈕上的文字內容,宣告並建立JButton型(或Button型)的數組,使用for循環為20個按鈕依序新增文字。
我們先來看看最終介面效果:
採用「委託事件處理模型」進行事件處理,以響應用戶的操作。本次主要使用到的元件是按鈕和文字框,故均可列為ActionEvent類,使用ActionListener事件監聽器接口,實作actionPerformed方法來回應事件。
計算功能的實作:注意雙目運算子和單目運算子的不同處理。雙目運算符,定義變數保存第一個操作數的值,以及雙目運算後的值,透過點擊「=」後將運算結果顯示到文字方塊中。單目運算符,輸入數值後,點選運算子直接在文字方塊中顯示運算結果。開平方根的功能透過呼叫Math類別的sqrt()方法實現,百分數運算直接乘以0.01即可,因為例如12%=12*0.01 0.12,為此特地定義了一個實現計算的方法,部分代碼如下:
public void calculate(){ char[]arr=input.getText().toCharArray();//将输入的计算表达式字符串存储在字符数组中便于查找运算符的位置 int i=0;//移动标志变量 while('0'<=arr[i]&&arr[i]<='9'||arr[i]=='.')//去除数字与小数点以确定双目运算符的位置 i++; char operator=arr[i];//将该运算符存储起来 //双目运算 if(operator!='%'&&operator!='√'){ String s=input.getText(),s1,s2;//s1,s2分别存储运算符前后的数值字符串 s1=s.substring(0,i); s2=s.substring(i+1,s.length()); Double left=Double.parseDouble(s1);//将运算符左边的数值字符串转换为浮点数 Double right=Double.parseDouble(s2);//将运算符右边的数值字符串转换为浮点数 //根据不同的运算符进行相应的计算 if(operator=='+')result=left+right; else if(operator=='-')result=left-right; else if(operator=='×')result=left*right; else if(operator=='÷')result=left/right; } //单目运算 else{ String s=input.getText(),s1; s1=s.substring(0,s.length()-1); Double a=Double.parseDouble(s1); if(operator=='%'){ result=0.01*a; } else if(operator=='√'){ result=Math.sqrt(a); } } }
程式碼思維:以8 5 此運算表達式為例。先從文字方塊input中取得使用者透過按鈕元件輸入的計算表達式字串“8 5”,先將其轉換成字元數組,如果是雙目運算,先透過循環找到運算子的位置,然後利用StringTokenizer類中的字元分割編輯的方法substring(a,b),取得字串中下標從a開始,b-1結束的字串(左閉右開區間),實現以運算子為分界線,將兩個數字字符分割出來,即分別獲得了'8'和'5'這兩個字符,再利用Double.parseDouble()的方法將其變為可進行運算的浮點數8.0和5.0,最後根據不同的運算符進行對應的計算,將結果儲存到變數result。單目運算子同理,只不過分割後只有一個左操作數沒有右操作數。
按鈕「C」清空文字方塊的實作:呼叫文字方塊物件的成員方法setText(""),將其重設為空字串即可
按鈕「←」退格的實作:先取得文字方塊中的字串,然後呼叫成員方法substring()得到除掉最後一個字元所剩下的子字串,最後將該字串設定為文字方塊物件的內容。部分程式碼如下:
String str=input.getText(); if(str.length()>1){ str=str.substring(0,str.length()-1); input.setText(str); } else{ input.setText(""); }
import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.util.StringTokenizer; public class Calculator extends JFrame implements ActionListener{ JTextField input;//文本框,显示计算结果 JButton []button=new JButton[20];//按钮数组,存放20个按钮组件 JPanel pan=new JPanel(); String name[]={"C","÷", "×", "←","7", "8", "9", "-", "4", "5", "6", "+", "1", "2", "3", "√", "%", "0", ".", "="};//按钮标签数组 double result;//存储双目运算的结果 public Calculator(){ setTitle("模拟计算器—江海大"); pan.setLayout(new GridLayout(5,4));//设置面板pan的布局格式为5行4列的网格布局,存放20个按钮 input=new JTextField(20); input.setText(""); input.setFont(new Font("宋体",Font.BOLD,18)); input.setForeground(Color.BLUE); for(int i=0;i<button.length;i++){ button[i]=new JButton(name[i]); button[i].setFont(new Font("黑体",Font.BOLD,20)); button[i].addActionListener(this);//给每一个按钮注册事件监听器 pan.add(button[i]); } add(input,BorderLayout.NORTH); add(pan,BorderLayout.CENTER); setSize(600,400); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗体 } //动作响应 public void actionPerformed(ActionEvent e){ //如果点击按钮 "C"则触发清空文本框的操作 if(e.getSource()==button[0]){ input.setText(""); } //如果点击按钮"="则调用计算方法并在文本框显示结果 else if(e.getSource()==button[19]){ calculate(); input.setText(""+result);//输出计算结果 } //如果点击"<--"按钮则删去文本框内字符串的末尾字符 else if(e.getSource()==button[3]){ String str=input.getText(); if(str.length()>1){ str=str.substring(0,str.length()-1); input.setText(str); } else{ input.setText(""); } } //以字符串拼接的方式将点击的按钮的标签拼接起来,成为一个运算表达式字符串 else{ input.setText(input.getText()+e.getActionCommand()); } } public void calculate(){ char[]arr=input.getText().toCharArray();//将输入的计算表达式字符串存储在字符数组中便于查找运算符的位置 int i=0;//移动标志变量 while('0'<=arr[i]&&arr[i]<='9'||arr[i]=='.')//去除数字与小数点以确定双目运算符的位置 i++; char operator=arr[i];//将该运算符存储起来 //双目运算 if(operator!='%'&&operator!='√'){ String s=input.getText(),s1,s2;//s1,s2分别存储运算符前后的数值字符串 s1=s.substring(0,i); s2=s.substring(i+1,s.length()); Double left=Double.parseDouble(s1);//将运算符左边的数值字符串转换为浮点数 Double right=Double.parseDouble(s2);//将运算符右边的数值字符串转换为浮点数 //根据不同的运算符进行相应的计算 if(operator=='+')result=left+right; else if(operator=='-')result=left-right; else if(operator=='×')result=left*right; else if(operator=='÷')result=left/right; } //单目运算 else{ String s=input.getText(),s1; s1=s.substring(0,s.length()-1); Double a=Double.parseDouble(s1); if(operator=='%'){ result=0.01*a; } else if(operator=='√'){ result=Math.sqrt(a); } } } public static void main(String[]args){ new Calculator(); } }
以上是Java GUI圖形介面開發如何實現小型計算器的詳細內容。更多資訊請關注PHP中文網其他相關文章!