Sunday, 13 October 2013

Source code for Calculator application implemented using java swing API

Source code for Calculator application implemented using java swing API ......

here is the code for the application ....its a mini project although a desktop application and it works well because i thoroughly tested it ...



       

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;

public class Calculator extends JFrame implements ActionListener {
 final int MAX_INPUT_LENGTH = 15;
 final int INPUT_MODE = 0;
 final int RESULT_MODE = 1;
 final int ERROR_MODE = 2;
 int displayMode;

 boolean clearOnNextDigit, percent;
 double lastNumber;
 String lastOperator;

 private JMenu jmenuFile, jmenuHelp;
 private JMenuItem jmenuitemExit, jmenuitemAbout;

 private JLabel jlbOutput;
 private JButton jbnButtons[];
 private JPanel jplMaster, jplBackSpace, jplControl;

 Font f1 = new Font("Times New Roman", 0, 18);
 Font f12 = new Font("Times New Roman", 1, 18);

 public Calculator() {
  jmenuFile = new JMenu("File");
  jmenuFile.setFont(f12);
  jmenuFile.setMnemonic(KeyEvent.VK_F);

  jmenuitemExit = new JMenuItem("Exit");
  jmenuitemExit.setFont(f1);
  jmenuitemExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,
   ActionEvent.CTRL_MASK));
  jmenuFile.add(jmenuitemExit);

  jmenuHelp = new JMenu("Help");
  jmenuHelp.setFont(f12);
  jmenuHelp.setMnemonic(KeyEvent.VK_H);

  jmenuitemAbout = new JMenuItem("About Calculator");
  jmenuitemAbout.setFont(f1);
  jmenuHelp.add(jmenuitemAbout);

  JMenuBar mb = new JMenuBar();
  mb.add(jmenuFile);
  mb.add(jmenuHelp);
  setJMenuBar(mb);

  setBackground(Color.gray);

  jplMaster = new JPanel();

  jlbOutput = new JLabel("0");
  jlbOutput.setHorizontalTextPosition(JLabel.RIGHT);
  jlbOutput.setBackground(Color.WHITE);
  jlbOutput.setOpaque(true);
  getContentPane().add(jlbOutput, BorderLayout.NORTH);

  jbnButtons = new JButton[18];
  JPanel jplButtons = new JPanel();
  for (int i = 0; i <= 9; i++) {
   jbnButtons[i] = new JButton(String.valueOf(i));
  }

  jbnButtons[10] = new JButton(".");
  jbnButtons[11] = new JButton("=");
  jbnButtons[12] = new JButton("/");
  jbnButtons[13] = new JButton("*");
  jbnButtons[14] = new JButton("-");
  jbnButtons[15] = new JButton("+");

  jplBackSpace = new JPanel();
  jplBackSpace.setLayout(new GridLayout(1, 1, 2, 3));

  jbnButtons[16] = new JButton("Backspace");
  jplBackSpace.add(jbnButtons[16]);
  jplControl = new JPanel();
  jplControl.setLayout(new GridLayout(1, 2, 2, 3));

  jbnButtons[17] = new JButton("C");
  jplControl.add(jbnButtons[17]);

  for (int i = 0; i < jbnButtons.length; i++) {
   jbnButtons[i].setFont(f12);

   if (i < 10)
    jbnButtons[i].setForeground(Color.blue);

   else
    jbnButtons[i].setForeground(Color.red);
  }

  jplButtons.setLayout(new GridLayout(4, 5, 2, 4));

  for (int i = 7; i <= 9; i++) {
   jplButtons.add(jbnButtons[i]);
  }

  jplButtons.add(jbnButtons[10]);
  jplButtons.add(jbnButtons[12]);


  for (int i = 4; i <= 6; i++) {
   jplButtons.add(jbnButtons[i]);
  }

  jplButtons.add(jbnButtons[14]);
  jplButtons.add(jbnButtons[11]);



  for (int i = 1; i <= 3; i++) {
   jplButtons.add(jbnButtons[i]);
  }

  jplButtons.add(jbnButtons[0]);
  jplButtons.add(jbnButtons[13]);
  jplButtons.add(jbnButtons[15]);
  jplButtons.add(jbnButtons[16]);
  jplButtons.add(jbnButtons[17]);


  jplMaster.setLayout(new BorderLayout());
  jplMaster.add(jplBackSpace, BorderLayout.WEST);
  jplMaster.add(jplControl, BorderLayout.EAST);
  jplMaster.add(jplButtons, BorderLayout.SOUTH);

  getContentPane().add(jplMaster, BorderLayout.SOUTH);
  requestFocus();

  for (int i = 0; i < jbnButtons.length; i++) {
   jbnButtons[i].addActionListener(this);
  }

  jmenuitemAbout.addActionListener(this);
  jmenuitemExit.addActionListener(this);

  clearAll();

  addWindowListener(new WindowAdapter() {

   public void windowClosed(WindowEvent e) {
    System.exit(0);
   }
  });
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }


 public void actionPerformed(ActionEvent e) {
  double result = 0;

  if (e.getSource() == jmenuitemAbout) {
   JDialog dlgAbout = new CustomABOUTDialog(this, "About Java Swing Calculator", true);
   dlgAbout.setVisible(true);
  } else if (e.getSource() == jmenuitemExit) {
   System.exit(0);
  }
  for (int i = 0; i < jbnButtons.length; i++) {
   if (e.getSource() == jbnButtons[i]) {
    switch (i) {
     case 0:
      addDigitToDisplay(i);
      break;

     case 1:
      addDigitToDisplay(i);
      break;

     case 2:
      addDigitToDisplay(i);
      break;

     case 3:
      addDigitToDisplay(i);
      break;

     case 4:
      addDigitToDisplay(i);
      break;

     case 5:
      addDigitToDisplay(i);
      break;

     case 6:
      addDigitToDisplay(i);
      break;

     case 7:
      addDigitToDisplay(i);
      break;

     case 8:
      addDigitToDisplay(i);
      break;

     case 9:
      addDigitToDisplay(i);
      break;


     case 10: // decimal point
      addDecimalPoint();
      break;

     case 11: // =
      processEquals();
      break;

     case 12: // divide
      processOperator("/");
      break;

     case 13: // *
      processOperator("*");
      break;

     case 14: // -
      processOperator("-");
      break;

     case 15: // +
      processOperator("+");
      break;



     case 16: // backspace
      if (displayMode != ERROR_MODE) {
       setDisplayString(getDisplayString().substring(0,
        getDisplayString().length() - 1));

       if (getDisplayString().length() < 1)
        setDisplayString("0");
      }
      break;


     case 17: // C
      clearAll();
      break;
    }
   }
  }
 }

 void setDisplayString(String s) {
  jlbOutput.setText(s);
 }

 String getDisplayString() {
  return jlbOutput.getText();
 }

 void addDigitToDisplay(int digit) {
  if (clearOnNextDigit)
   setDisplayString("");

  String inputString = getDisplayString();

  if (inputString.indexOf("0") == 0) {
   inputString = inputString.substring(1);
  }

  if ((!inputString.equals("0") || digit > 0) && inputString.length() < MAX_INPUT_LENGTH) {
   setDisplayString(inputString + digit);
  }


  displayMode = INPUT_MODE;
  clearOnNextDigit = false;
 }

 void addDecimalPoint() {
  displayMode = INPUT_MODE;

  if (clearOnNextDigit)
   setDisplayString("");

  String inputString = getDisplayString();
  if (inputString.indexOf(".") < 0)
   setDisplayString(new String(inputString + "."));
 }



 void clearAll() {
  setDisplayString("0");
  lastOperator = "0";
  lastNumber = 0;
  displayMode = INPUT_MODE;
  clearOnNextDigit = true;
 }



 double getNumberInDisplay() {
  String input = jlbOutput.getText();
  return Double.parseDouble(input);
 }

 void processOperator(String op) {
  if (displayMode != ERROR_MODE) {
   double numberInDisplay = getNumberInDisplay();

   if (!lastOperator.equals("0")) {
    try {
     double result = processLastOperator();
     displayResult(result);
     lastNumber = result;
    } catch (DivideByZeroException e) {}
   } else {
    lastNumber = numberInDisplay;
   }

   clearOnNextDigit = true;
   lastOperator = op;
  }
 }

 void processEquals() {
  double result = 0;

  if (displayMode != ERROR_MODE) {
   try {
    result = processLastOperator();
    displayResult(result);
   } catch (DivideByZeroException e) {
    displayError("Cannot divide by zero!");
   }

   lastOperator = "0";
  }
 }

 double processLastOperator() throws DivideByZeroException {
  double result = 0;
  double numberInDisplay = getNumberInDisplay();

  if (lastOperator.equals("/")) {
   if (numberInDisplay == 0)
    throw (new DivideByZeroException());

   result = lastNumber / numberInDisplay;
  }

  if (lastOperator.equals("*"))
   result = lastNumber * numberInDisplay;

  if (lastOperator.equals("-"))
   result = lastNumber - numberInDisplay;

  if (lastOperator.equals("+"))
   result = lastNumber + numberInDisplay;

  return result;
 }

 void displayResult(double result) {
  setDisplayString(Double.toString(result));
  lastNumber = result;
  displayMode = RESULT_MODE;
  clearOnNextDigit = true;
 }

 void displayError(String errorMessage) {
  setDisplayString(errorMessage);
  lastNumber = 0;
  displayMode = ERROR_MODE;
  clearOnNextDigit = true;
 }

 public static void main(String args[]) {
  Calculator calci = new Calculator();
  Container contentPane = calci.getContentPane();
  calci.setTitle("Java Swing Calculator");
  calci.setSize(400, 360);
  calci.pack();
  calci.setLocation(300, 290);
  calci.setVisible(true);
  calci.setResizable(false);
 }

}
class DivideByZeroException extends Exception {
 public DivideByZeroException() {
  super();
 }

 public DivideByZeroException(String s) {
  super(s);
 }
}

class CustomABOUTDialog extends JDialog implements ActionListener {
 JButton jbnOk;

 CustomABOUTDialog(JFrame parent, String title, boolean modal) {
  super(parent, title, modal);
  setBackground(Color.black);

  JPanel p1 = new JPanel(new FlowLayout(FlowLayout.CENTER));

  StringBuffer text = new StringBuffer();
  text.append("Calculator Information\n\n");
  text.append("Developer: Amita Sikarwar\n class:  B.C.A 5th sem\n Roll No:  124\n\n");
  text.append("Version: 1.0");

  JTextArea jtAreaAbout = new JTextArea(5, 16);
  jtAreaAbout.setText(text.toString());
  jtAreaAbout.setFont(new Font("Times New Roman", 1, 13));
  jtAreaAbout.setEditable(false);

  p1.add(jtAreaAbout);
  p1.setBackground(Color.red);
  getContentPane().add(p1, BorderLayout.CENTER);

  JPanel p2 = new JPanel(new FlowLayout(FlowLayout.CENTER));
  jbnOk = new JButton(" OK ");
  jbnOk.addActionListener(this);

  p2.add(jbnOk);
  getContentPane().add(p2, BorderLayout.SOUTH);

  setLocation(600, 350);
  setResizable(false);

  addWindowListener(new WindowAdapter() {
   public void windowClosing(WindowEvent e) {
    Window aboutDialog = e.getWindow();
    aboutDialog.dispose();
   }
  });

  pack();
 }

 public void actionPerformed(ActionEvent e) {
  if (e.getSource() == jbnOk) {
   this.dispose();
  }
 }

}

       
 

No comments:

Post a Comment