DEV Community

Cover image for Creating a Calculator using Java AWT
ROHIT KUMAR
ROHIT KUMAR

Posted on • Edited on

Creating a Calculator using Java AWT

OUTPUT

In this Java tutorial,

We will learn how to build a simple calculator using Java AWT. This calculator has some simple functionality like all the basic mathematical operations and some special addon features , we will see as we follow
So let’s get started
FIRST of all small description on AWT
AWT(Abstract Window Toolkit) is an API that helps in building GUI (Graphical User Interface) based java applications. GUI helps in user interactions using some graphics. It primarily consists of a set of classes and methods that are required for creating and managing the GUI in a simplified manner such as buttons,windows,frame,textfield,RadioButton etc
I have provided the Java code for the calculator which uses Action listener interface for EventHandling.
And yes its not an applet code, which is deprecated

 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"); // INSTANTIATING COMPONENETS  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); //ADDING TO FRAME  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); } //FOR CLOSING THE WINDOW public void windowClosing(WindowEvent e) { f.dispose(); } public void actionPerformed(ActionEvent e){ String z,zt; //NUMBER BUTTON  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){ //ADD DECIMAL PTS zt=l1.getText(); z=zt+"."; l1.setText(z); } if(e.getSource()==bneg){ //FOR NEGATIVE zt=l1.getText(); z="-"+zt; l1.setText(z); } if(e.getSource()==bback){ // FOR BACKSPACE zt=l1.getText(); try{ z=zt.substring(0, zt.length()-1); }catch(StringIndexOutOfBoundsException f){return;} l1.setText(z); } //AIRTHMETIC BUTTON if(e.getSource()==badd){ //FOR ADDITION try{ num1=Double.parseDouble(l1.getText()); }catch(NumberFormatException f){ l1.setText("Invalid Format"); return; } z=""; l1.setText(z); check=1; } if(e.getSource()==bsub){ //FOR SUBTRACTION try{ num1=Double.parseDouble(l1.getText()); }catch(NumberFormatException f){ l1.setText("Invalid Format"); return; } z=""; l1.setText(z); check=2; } if(e.getSource()==bmult){ //FOR MULTIPLICATION try{ num1=Double.parseDouble(l1.getText()); }catch(NumberFormatException f){ l1.setText("Invalid Format"); return; } z=""; l1.setText(z); check=3; } if(e.getSource()==bdiv){ //FOR DIVISION try{ num1=Double.parseDouble(l1.getText()); }catch(NumberFormatException f){ l1.setText("Invalid Format"); return; } z=""; l1.setText(z); check=4; } if(e.getSource()==bmod){ //FOR MOD/REMAINDER try{ num1=Double.parseDouble(l1.getText()); }catch(NumberFormatException f){ l1.setText("Invalid Format"); return; } z=""; l1.setText(z); check=5; } //RESULT BUTTON 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)); } //FOR CLEARING THE LABEL and Memory if(e.getSource()==bclr){ num1=0; num2=0; check=0; xd=0; z=""; l1.setText(z); } } //MAIN METHOD where objects of MyCalc is instantaiated public static void main(String args[]){ new MyCalc(); } } 
Enter fullscreen mode Exit fullscreen mode

SO what I did is just implemented ActionListenerinterface in our MyCalc class and in its constructor i Register the AWT components with the Listener and done EventHandling using actionPerformed method.
OUR all the logic part in written in this actionPerformed function only which we will see below:

LOGIC PART

1.FOR NUMERIC BUTTON

 if(e.getSource()==b1){ //b1 for number 1 zt=l1.getText(); z=zt+"1";// 1 will merged at the end of the previous value l1.setText(z); } 
Enter fullscreen mode Exit fullscreen mode

when any of the numeric button pressed
whatever value in label l1 will be stored in a variable zt and then concatenated with the corresponding number and and then displayed in the label l1
for NEGATIVE and DECIMAL PTS Button we did it similarly

2.FOR AIRTHMETIC BUTTON

 if(e.getSource()==badd){ //FOR ADDITION num1=Double.parseDouble(l1.getText()); z=""; l1.setText(z); check=1; // 1 for the adddition } 
Enter fullscreen mode Exit fullscreen mode

NOW here we store the value of label l1 into a variable num1 after converting into double type which will be technically 1st number
and then and set label l1 to null

we will just use a check variable for getting that this particular airthmetic button(here +) was clicked so we can do this operation in our = button

3.FOR EQUALS BUTTON

 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)); } 
Enter fullscreen mode Exit fullscreen mode

NOW again store the value of l1 into num2 variable which will be techincally 2nd number
and then check the value of variable check and then do corresponding operation and after that display result in label l1

4.FOR CLEAR BUTTON

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

here updated all the variable we use to its Default value 0
and set label l1 to null so that we can start our new calculation afterward

5.FOR BACKSPACE BUTTON

 if(e.getSource()==bback){ // FOR BACKSPACE zt=l1.getText(); try{ z=zt.substring(0, zt.length()-1); }catch(StringIndexOutOfBoundsException f){return;} l1.setText(z); } 
Enter fullscreen mode Exit fullscreen mode

here just updates the value in l1 by removing last digits using substring function
and handled one StringIndexOutOfBoundsException which occur when our value in label is null and still pressing back Button

6.SPECIAL ADDONS FEATURE

what I did is just handled one execption in EQUAL and all AIRTHMETIC Buttons and printed a desired message according to situtation
inside AIRTHMETIC BUTTONS:

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

inside EQUALS BUTTON:

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

when we was converting the value into the double value, BUT lets say that, label l1 has null value (i.e. label is empty) and we still pressed these button then it will generate NumberFormatException execption,
So handled that and printed desired message
For eg:
If I click1 then + and then i click - instead of some other numeric button, hence this an invalid format, and when -was clicked at that time label was null hence execption generated so just handled it and printed invalid format inlabel

SIMILARLY, when label is null,and = was clicked in that situation ENTER NUMBER FIRST will be displayed inside label

With this, we come to an end of this Java AWT Tutorial.
So just go through the code and try it. If you have any difficulty in understanding or using the code, then you ask by commenting below.
If you would like to download & run my CALC you can find here
I have uploaded both source code & executable jarfile

Thank You!

You can follow me on:
Twitter
Linkedin

Top comments (7)

Collapse
 
rash123 profile image
RASHMI VERMA

Great👍👍

Collapse
 
rohitk570 profile image
ROHIT KUMAR

Thanks 😊😊

Collapse
 
cenacr007_harsh profile image
KUMAR HARSH

Nice Project

Collapse
 
rohitk570 profile image
ROHIT KUMAR

Thanks ☺️

Collapse
 
geofrey_tuhaise_fabd731d5 profile image
Geofrey Tuhaise

good to go!!!!

Collapse
 
likitha_vasalmarri_493f98 profile image
Likitha Vasalmarri

Great

Collapse
 
jagoum profile image
Jagoum

Wow very nice but i am really want to learn this since am an absolute beginner in java