首頁 > 軟體

如何利用Java AWT 建立一個簡易計算器

2022-03-30 19:04:30

摘要:手把手教你使用 Java AWT 建立一個簡易計算器。

一、關於AWT

AWT (抽象視窗工具包)是一個有助於構建 GUI 的 API (圖形化使用者介面)基於 java 應用程式。GUI使用一些圖形幫助使用者互動。它主要由一組的類和方法所必需的,如在一個簡化的方式建立和管理的GUI按鈕,視窗,框架,文字方塊,無線電鈕 等等

我所提供的Java程式碼對於動作監聽器介面用於事件處理的計算器。

二、邏輯部分

1.對於數位按鈕

if(e.getSource()==b1){ //b1 代表數位 1
 zt=l1.getText();
  z=zt+"1";// 1 將合併在前一個值的末尾
  l1.setText(z);
}

當按下任何數位按鈕時,標籤 l1 中的任何值都將儲存在變數 zt 中,然後與相應的數位連線,然後顯示在標籤 l1 中,對於 NEGATIVE 和 DECIMAL PTS 按鈕,我們也做了類似的處理

2.對於算術按鈕

if(e.getSource()==badd){  //對應加法
    num1=Double.parseDouble(l1.getText());
  z="";
  l1.setText(z);
  check=1; 
}

現在,我們將標籤 l1 的值轉換為 double 型別後,將其儲存到變數 num1 中,這在技術上將是第一個數位,然後將標籤 l1 設定為 null

我們將只使用一個檢查變數來獲取這個特定的氣動按鈕(這裡是 +)被點選,這樣我們就可以在我們的 = 按鈕中執行這個操作

3.對於等號按鈕

if(e.getSource()==bcalc){          
    num2=Double.parseDouble(l1.getText());
  if(check==1)
    xd =num1+num2;
  if(check==2)
    xd =num1-num2;
  if(check==3)
    xd =num1*num2;
  if(check==4)
    xd =num1/num2; 
  if(check==5)
    xd =num1%num2;    
  l1.setText(String.valueOf(xd));
}

現在再次將值儲存 l1到 num2變數中,這將是算術上的第二個數位,然後檢查變數的值,check然後進行相應的操作,然後在標籤中顯示結果 l1

4.對於清除按鈕

 if(e.getSource()==bclr){
  num1=0;
  num2=0;
  check=0;
  xd=0;
   z="";
   l1.setText(z);
   } 

此處將我們使用的所有變數更新為其預設值 0

並將標籤 l1 設定為 null,以便我們之後可以開始新的計算

5.對於退格按鈕

 if(e.getSource()==bback){  
  zt=l1.getText();
  try{
    z=zt.substring(0, zt.length()-1);
    }catch(StringIndexOutOfBoundsException f){return;}
  l1.setText(z);
}

這裡只是l1通過使用substring函數刪除最後一位數位來更新值

並處理了一個 StringIndexOutOfBoundsException 當我們在標籤中的值為 null 並且仍然按下返回按鈕時發生的異常

6.特殊外掛功能

我所做的只是處理了 EQUAL 和所有 ARITHMETIC Buttons 中的一個異常,並根據情況列印了所需的訊息

算術按鈕:

try{
    num1=Double.parseDouble(l1.getText());
    }catch(NumberFormatException f){
      l1.setText("Invalid Format");
      return;
    }

等於按鈕:

try{
    num2=Double.parseDouble(l1.getText());
    }catch(Exception f){
      l1.setText("ENTER NUMBER FIRST ");
      return;
    }

當我們將值轉換為雙精度值時,但可以說,標籤 l1 具有空值(即標籤為空)並且我們仍然按下這些按鈕,然後它將生成 NumberFormatException execption,所以處理並列印所需的訊息。

7.==例如==:

如果我點選1然後+然後我點選-而不是其他一些數位按鈕,因此這是一個無效的格式,並且當-當時被點選時標籤為空因此生成了execption所以只是處理它並在標籤中列印無效格式

類似地,當標籤為空時,並且在這種情況下單擊= ENTER NUMBER FIRST 將顯示在標籤內

至此,我們結束了本次 Java AWT 教學。

三、GIF演示

四、附完整程式碼

import java.awt.*;  
import java.awt.event.*;  
class MyCalc extends WindowAdapter implements ActionListener{ 
  Frame f; 
Label l1;
Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b0;
Button badd,bsub,bmult,bdiv,bmod,bcalc,bclr,bpts,bneg,bback;
double xd;
double num1,num2,check;

MyCalc(){  
  f= new Frame("MY CALCULATOR");
// 範例化元件
l1=new Label(); 
l1.setBackground(Color.LIGHT_GRAY);
l1.setBounds(50,50,260,60);
b1=new Button("1");
  b1.setBounds(50,340,50,50);
b2=new Button("2");
  b2.setBounds(120,340,50,50);
b3=new Button("3");
  b3.setBounds(190,340,50,50);
b4=new Button("4");
  b4.setBounds(50,270,50,50);
b5=new Button("5");
  b5.setBounds(120,270,50,50); 
b6=new Button("6");
  b6.setBounds(190,270,50,50);
b7=new Button("7");
  b7.setBounds(50,200,50,50);
b8=new Button("8");
  b8.setBounds(120,200,50,50);
b9=new Button("9");
  b9.setBounds(190,200,50,50);
b0=new Button("0");
  b0.setBounds(120,410,50,50);
bneg=new Button("+/-");
  bneg.setBounds(50,410,50,50);
bpts=new Button(".");
  bpts.setBounds(190,410,50,50);
bback=new Button("back");
 bback.setBounds(120,130,50,50);

badd=new Button("+");
  badd.setBounds(260,340,50,50);
bsub=new Button("-");
  bsub.setBounds(260,270,50,50);
bmult=new Button("*");
  bmult.setBounds(260,200,50,50);
bdiv=new Button("/");
  bdiv.setBounds(260,130,50,50);
bmod=new Button("%");
  bmod.setBounds(190,130,50,50);
bcalc=new Button("=");
  bcalc.setBounds(245,410,65,50);
bclr=new Button("CE"); 
  bclr.setBounds(50,130,65,50);
b1.addActionListener(this); 
b2.addActionListener(this);  
b3.addActionListener(this);  
b4.addActionListener(this);  
b5.addActionListener(this); 
b6.addActionListener(this); 
b7.addActionListener(this); 
b8.addActionListener(this); 
b9.addActionListener(this);  
b0.addActionListener(this);

bpts.addActionListener(this);  
bneg.addActionListener(this);
bback.addActionListener(this); 

badd.addActionListener(this);
bsub.addActionListener(this);
bmult.addActionListener(this);
bdiv.addActionListener(this);
bmod.addActionListener(this);
bcalc.addActionListener(this);
bclr.addActionListener(this); 

f.addWindowListener(this);
//新增到框架
f.add(l1);  
f.add(b1); f.add(b2); f.add(b3); f.add(b4); f.add(b5);f.add(b6); f.add(b7); f.add(b8);f.add(b9);f.add(b0);

f.add(badd); f.add(bsub); f.add(bmod); f.add(bmult); f.add(bdiv); f.add(bmod);f.add(bcalc);

f.add(bclr); f.add(bpts);f.add(bneg); f.add(bback);

f.setSize(360,500);  
f.setLayout(null);  
f.setVisible(true);  
} 
                     //關閉視窗
public void windowClosing(WindowEvent e) {
  f.dispose();
}

public void actionPerformed(ActionEvent e){ 
  String z,zt;
                        //數位按鈕
if(e.getSource()==b1){
 zt=l1.getText();
  z=zt+"1";
  l1.setText(z);
}
if(e.getSource()==b2){
zt=l1.getText();
z=zt+"2";
l1.setText(z);
}
if(e.getSource()==b3){
  zt=l1.getText();
  z=zt+"3";
  l1.setText(z);
}
if(e.getSource()==b4){
  zt=l1.getText();
  z=zt+"4";
  l1.setText(z);
}
if(e.getSource()==b5){
  zt=l1.getText();
  z=zt+"5";
  l1.setText(z);
}
if(e.getSource()==b6){
  zt=l1.getText();
  z=zt+"6";
  l1.setText(z);
}
if(e.getSource()==b7){
  zt=l1.getText();
  z=zt+"7";
  l1.setText(z);
}
if(e.getSource()==b8){
  zt=l1.getText();
  z=zt+"8";
  l1.setText(z);
}
if(e.getSource()==b9){
  zt=l1.getText();
  z=zt+"9";
  l1.setText(z);
}
if(e.getSource()==b0){
  zt=l1.getText();
  z=zt+"0";
  l1.setText(z);
}

if(e.getSource()==bpts){  //新增小數點
  zt=l1.getText();
  z=zt+".";
  l1.setText(z);
}
if(e.getSource()==bneg){ //對於減
  zt=l1.getText();
  z="-"+zt;
  l1.setText(z);
}

if(e.getSource()==bback){  // 退格用
  zt=l1.getText();
  try{
    z=zt.substring(0, zt.length()-1);
    }catch(StringIndexOutOfBoundsException f){return;}
  l1.setText(z);
}
                //算術按鈕
if(e.getSource()==badd){                     //對應加法
  try{
    num1=Double.parseDouble(l1.getText());
    }catch(NumberFormatException f){
      l1.setText("Invalid Format");
      return;
    }
  z="";
  l1.setText(z);
  check=1;
}
if(e.getSource()==bsub){                    //對應減法
  try{
    num1=Double.parseDouble(l1.getText());
    }catch(NumberFormatException f){
      l1.setText("Invalid Format");
      return;
    }
  z="";
  l1.setText(z);
  check=2;
}
if(e.getSource()==bmult){                   //對應乘法
  try{
    num1=Double.parseDouble(l1.getText());
    }catch(NumberFormatException f){
      l1.setText("Invalid Format");
      return;
    }
  z="";
  l1.setText(z);
  check=3;
}
if(e.getSource()==bdiv){                   //對應除法
  try{
    num1=Double.parseDouble(l1.getText());
    }catch(NumberFormatException f){
      l1.setText("Invalid Format");
      return;
    }
  z="";
  l1.setText(z);
  check=4;
}
if(e.getSource()==bmod){                  //對應MOD/剩餘
  try{
    num1=Double.parseDouble(l1.getText());
    }catch(NumberFormatException f){
      l1.setText("Invalid Format");
      return;
    }
  z="";
  l1.setText(z);
  check=5;
}
                         //結果按鈕
if(e.getSource()==bcalc){          
  try{
    num2=Double.parseDouble(l1.getText());
    }catch(Exception f){
      l1.setText("ENTER NUMBER FIRST ");
      return;
    }
  if(check==1)
    xd =num1+num2;
  if(check==2)
    xd =num1-num2;
  if(check==3)
    xd =num1*num2;
  if(check==4)
    xd =num1/num2; 
  if(check==5)
    xd =num1%num2;    
  l1.setText(String.valueOf(xd));
}
                        //清除標籤和記憶體
if(e.getSource()==bclr){
  num1=0;
  num2=0;
  check=0;
  xd=0;
   z="";
   l1.setText(z);
   } 

}  
//範例化 MyCalc 物件的 main 方法
 public static void main(String args[]){  
       new MyCalc();  
   }
}  

到此這篇關於如何利用Java AWT 建立一個簡易計算器的文章就介紹到這了,更多相關Java AWT 建立計算器內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com