手把手教你使用 Java AWT 建立一个简易计算器 | 8月更文挑战

在本 Java 教程中,这个计算器有一些简单的功能,好比全部基本的数学运算和一些特殊的附加功能,咱们将在后面看到java

那么让咱们开始git

🧿 关于AWT

AWT (抽象窗口工具包)是一个有助于构建 GUI 的 API (图形用户界面)基于 java 应用程序。GUI使用一些图形帮助用户交互。它主要由一组的类和方法所必需的,如在一个简化的方式建立和管理的GUI按钮,窗口,框架,文本框,单选按钮 等等github

我所提供的Java代码对于动做监听器接口用于事件处理的计算器。markdown

在这里插入图片描述

🎶 逻辑部分

🏀 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 设置为 nullsvn

咱们将只使用一个检查变量来获取这个特定的气动按钮(这里是 +)被点击,这样咱们就能够在咱们的 = 按钮中执行这个操做函数

🍖 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);
   } 
复制代码

此处将咱们使用的全部变量更新为其默认值 0oop

并将标签 l1 设置为 null,以便咱们以后能够开始新的计算post

🏆 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,因此处理并打印所需的消息。

==例如==:

若是我点击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();  
   }
}  
复制代码

😊 结尾想说的

因此只需经过代码并尝试一下。若是您在理解或使用代码方面有任何困难,请在下方评论询问。

若是你想下载并运行个人,我已经上传了源代码和可执行的 jar 包,你能够在这里找到:

github.com/wanghao221/… 若是你喜欢这份工做,能够点个star。

我已经写了很长一段时间的技术博客,而且主要经过掘金发表,这是个人一篇技术文章/教程。我喜欢经过文章分享技术与快乐。请访问个人博客: juejin.cn/user/204034… 以了解更多信息。但愿大家会喜欢!这里汇总了个人所有原创及做品源码:GitHub

若是你真的从这篇文章中学到了一些新东西,喜欢它,收藏它并与你的小伙伴分享。🤗最后,不要忘了❤或📑支持一下哦

相关文章
相关标签/搜索