Calculator in Java with Source Code: We can develop calculator in java with the help of AWT/Swing with event handling. Let's see the code of creating calculator in java.
- /*********************************************
- Save this file as MyCalculator.java
- to compile it use
- javac MyCalculator.java
- to use the calcuator do this
- java MyCalculator
- **********************************************/
- import java.awt.*;
- import java.awt.event.*;
- /*********************************************/
- public class MyCalculator extends Frame
- {
- public boolean setClear=true;
- double number, memValue;
- char op;
- String digitButtonText[] = {"7", "8", "9", "4", "5", "6", "1", "2", "3", "0", "+/-", "." };
- String operatorButtonText[] = {"/", "sqrt", "*", "%", "-", "1/X", "+", "=" };
- String memoryButtonText[] = {"MC", "MR", "MS", "M+" };
- String specialButtonText[] = {"Backspc", "C", "CE" };
- MyDigitButton digitButton[]=new MyDigitButton[digitButtonText.length];
- MyOperatorButton operatorButton[]=new MyOperatorButton[operatorButtonText.length];
- MyMemoryButton memoryButton[]=new MyMemoryButton[memoryButtonText.length];
- MySpecialButton specialButton[]=new MySpecialButton[specialButtonText.length];
- Label displayLabel=new Label("0",Label.RIGHT);
- Label memLabel=new Label(" ",Label.RIGHT);
- final int FRAME_WIDTH=325,FRAME_HEIGHT=325;
- final int HEIGHT=30, WIDTH=30, H_SPACE=10,V_SPACE=10;
- final int TOPX=30, TOPY=50;
- ///////////////////////////
- MyCalculator(String frameText)//constructor
- {
- super(frameText);
- int tempX=TOPX, y=TOPY;
- displayLabel.setBounds(tempX,y,240,HEIGHT);
- displayLabel.setBackground(Color.BLUE);
- displayLabel.setForeground(Color.WHITE);
- add(displayLabel);
- memLabel.setBounds(TOPX, TOPY+HEIGHT+ V_SPACE,WIDTH, HEIGHT);
- add(memLabel);
- // set Co-ordinates for Memory Buttons
- tempX=TOPX;
- y=TOPY+2*(HEIGHT+V_SPACE);
- for(int i=0; i<memoryButton.length; i++)
- {
- memoryButton[i]=new MyMemoryButton(tempX,y,WIDTH,HEIGHT,memoryButtonText[i], this);
- memoryButton[i].setForeground(Color.RED);
- y+=HEIGHT+V_SPACE;
- }
- //set Co-ordinates for Special Buttons
- tempX=TOPX+1*(WIDTH+H_SPACE); y=TOPY+1*(HEIGHT+V_SPACE);
- for(int i=0;i<specialButton.length;i++)
- {
- specialButton[i]=new MySpecialButton(tempX,y,WIDTH*2,HEIGHT,specialButtonText[i], this);
- specialButton[i].setForeground(Color.RED);
- tempX=tempX+2*WIDTH+H_SPACE;
- }
- //set Co-ordinates for Digit Buttons
- int digitX=TOPX+WIDTH+H_SPACE;
- int digitY=TOPY+2*(HEIGHT+V_SPACE);
- tempX=digitX; y=digitY;
- for(int i=0;i<digitButton.length;i++)
- {
- digitButton[i]=new MyDigitButton(tempX,y,WIDTH,HEIGHT,digitButtonText[i], this);
- digitButton[i].setForeground(Color.BLUE);
- tempX+=WIDTH+H_SPACE;
- if((i+1)%3==0){tempX=digitX; y+=HEIGHT+V_SPACE;}
- }
- //set Co-ordinates for Operator Buttons
- int opsX=digitX+2*(WIDTH+H_SPACE)+H_SPACE;
- int opsY=digitY;
- tempX=opsX; y=opsY;
- for(int i=0;i<operatorButton.length;i++)
- {
- tempX+=WIDTH+H_SPACE;
- operatorButton[i]=new MyOperatorButton(tempX,y,WIDTH,HEIGHT,operatorButtonText[i], this);
- operatorButton[i].setForeground(Color.RED);
- if((i+1)%2==0){tempX=opsX; y+=HEIGHT+V_SPACE;}
- }
- addWindowListener(new WindowAdapter()
- {
- public void windowClosing(WindowEvent ev)
- {System.exit(0);}
- });
- setLayout(null);
- setSize(FRAME_WIDTH,FRAME_HEIGHT);
- setVisible(true);
- }
- //////////////////////////////////
- static String getFormattedText(double temp)
- {
- String resText=""+temp;
- if(resText.lastIndexOf(".0")>0)
- resText=resText.substring(0,resText.length()-2);
- return resText;
- }
- ////////////////////////////////////////
- public static void main(String []args)
- {
- new MyCalculator("Calculator");
- }
- }
- /*******************************************/
- class MyDigitButton extends Button implements ActionListener
- {
- MyCalculator cl;
- //////////////////////////////////////////
- MyDigitButton(int x,int y, int width,int height,String cap, MyCalculator clc)
- {
- super(cap);
- setBounds(x,y,width,height);
- this.cl=clc;
- this.cl.add(this);
- addActionListener(this);
- }
- ////////////////////////////////////////////////
- static boolean isInString(String s, char ch)
- {
- for(int i=0; i<s.length();i++) if(s.charAt(i)==ch) return true;
- return false;
- }
- /////////////////////////////////////////////////
- public void actionPerformed(ActionEvent ev)
- {
- String tempText=((MyDigitButton)ev.getSource()).getLabel();
- if(tempText.equals("."))
- {
- if(cl.setClear)
- {cl.displayLabel.setText("0.");cl.setClear=false;}
- else if(!isInString(cl.displayLabel.getText(),'.'))
- cl.displayLabel.setText(cl.displayLabel.getText()+".");
- return;
- }
- int index=0;
- try{
- index=Integer.parseInt(tempText);
- }catch(NumberFormatException e){return;}
- if (index==0 && cl.displayLabel.getText().equals("0")) return;
- if(cl.setClear)
- {cl.displayLabel.setText(""+index);cl.setClear=false;}
- else
- cl.displayLabel.setText(cl.displayLabel.getText()+index);
- }//actionPerformed
- }//class defination
- /********************************************/
- class MyOperatorButton extends Button implements ActionListener
- {
- MyCalculator cl;
- MyOperatorButton(int x,int y, int width,int height,String cap, MyCalculator clc)
- {
- super(cap);
- setBounds(x,y,width,height);
- this.cl=clc;
- this.cl.add(this);
- addActionListener(this);
- }
- ///////////////////////
- public void actionPerformed(ActionEvent ev)
- {
- String opText=((MyOperatorButton)ev.getSource()).getLabel();
- cl.setClear=true;
- double temp=Double.parseDouble(cl.displayLabel.getText());
- if(opText.equals("1/x"))
- {
- try
- {double tempd=1/(double)temp;
- cl.displayLabel.setText(MyCalculator.getFormattedText(tempd));}
- catch(ArithmeticException excp)
- {cl.displayLabel.setText("Divide by 0.");}
- return;
- }
- if(opText.equals("sqrt"))
- {
- try
- {double tempd=Math.sqrt(temp);
- cl.displayLabel.setText(MyCalculator.getFormattedText(tempd));}
- catch(ArithmeticException excp)
- {cl.displayLabel.setText("Divide by 0.");}
- return;
- }
- if(!opText.equals("="))
- {
- cl.number=temp;
- cl.op=opText.charAt(0);
- return;
- }
- // process = button pressed
- switch(cl.op)
- {
- case '+':
- temp+=cl.number;break;
- case '-':
- temp=cl.number-temp;break;
- case '*':
- temp*=cl.number;break;
- case '%':
- try{temp=cl.number%temp;}
- catch(ArithmeticException excp)
- {cl.displayLabel.setText("Divide by 0."); return;}
- break;
- case '/':
- try{temp=cl.number/temp;}
- catch(ArithmeticException excp)
- {cl.displayLabel.setText("Divide by 0."); return;}
- break;
- }//switch
- cl.displayLabel.setText(MyCalculator.getFormattedText(temp));
- //cl.number=temp;
- }//actionPerformed
- }//class
- /****************************************/
- class MyMemoryButton extends Button implements ActionListener
- {
- MyCalculator cl;
- /////////////////////////////////
- MyMemoryButton(int x,int y, int width,int height,String cap, MyCalculator clc)
- {
- super(cap);
- setBounds(x,y,width,height);
- this.cl=clc;
- this.cl.add(this);
- addActionListener(this);
- }
- ////////////////////////////////////////////////
- public void actionPerformed(ActionEvent ev)
- {
- char memop=((MyMemoryButton)ev.getSource()).getLabel().charAt(1);
- cl.setClear=true;
- double temp=Double.parseDouble(cl.displayLabel.getText());
- switch(memop)
- {
- case 'C':
- cl.memLabel.setText(" ");cl.memValue=0.0;break;
- case 'R':
- cl.displayLabel.setText(MyCalculator.getFormattedText(cl.memValue));break;
- case 'S':
- cl.memValue=0.0;
- case '+':
- cl.memValue+=Double.parseDouble(cl.displayLabel.getText());
- if(cl.displayLabel.getText().equals("0") || cl.displayLabel.getText().equals("0.0") )
- cl.memLabel.setText(" ");
- else
- cl.memLabel.setText("M");
- break;
- }//switch
- }//actionPerformed
- }//class
- /*****************************************/
- class MySpecialButton extends Button implements ActionListener
- {
- MyCalculator cl;
- MySpecialButton(int x,int y, int width,int height,String cap, MyCalculator clc)
- {
- super(cap);
- setBounds(x,y,width,height);
- this.cl=clc;
- this.cl.add(this);
- addActionListener(this);
- }
- //////////////////////
- static String backSpace(String s)
- {
- String Res="";
- for(int i=0; i<s.length()-1; i++) Res+=s.charAt(i);
- return Res;
- }
- //////////////////////////////////////////////////////////
- public void actionPerformed(ActionEvent ev)
- {
- String opText=((MySpecialButton)ev.getSource()).getLabel();
- //check for backspace button
- if(opText.equals("Backspc"))
- {
- String tempText=backSpace(cl.displayLabel.getText());
- if(tempText.equals(""))
- cl.displayLabel.setText("0");
- else
- cl.displayLabel.setText(tempText);
- return;
- }
- //check for "C" button i.e. Reset
- if(opText.equals("C"))
- {
- cl.number=0.0; cl.op=' '; cl.memValue=0.0;
- cl.memLabel.setText(" ");
- }
- //it must be CE button pressed
- cl.displayLabel.setText("0");cl.setClear=true;
- }//actionPerformed
- }//class
- /*********************************************
- Features not implemented and few bugs
- i) No coding done for "+/-" button.
- ii) Menubar is not included.
- iii)Not for Scientific calculation
- iv)Some of the computation may lead to unexpected result
- due to the representation of Floating point numbers in computer
- is an approximation to the given value that can be stored
- physically in memory.
- ***********************************************/
No comments:
Post a Comment