| | |
Java Swing Tutorial
     JFrame
     JInternalFrame
     JWindow
     JOptionPane
     JLabel
     JTextField
     JPasswordField
     JTextArea
     JButton
     JRadioButton
     JCheckBox
     JComboBox
     Jlist
     JTabbedPane
     JMenuBar
     Scrollable JPopupMenu
     JToolBar
     BorderLayout
     FlowLayout
     GridLayout
     GridBagLayout
     Java Look and Feel
     Swing Calculator
     Swing Address book
     Shuffle Game
     Beginner Java Tutorial
     JDBC Tutorial
     Java Interview Questions
     



Java Swing Calculator

This is a free Java calculator tutorial developed using Java Swing. Below you will find the java code for calculator along with the screenshot. It is a basic four-function calculator java program source code. The calculator that we build will look like:



Java simple calculator

1. A four-function calculator with the following functions:
* Addition - adds two numbers: n1 + n2.
* Subtraction - subtracts number two from number one: n1 - n2.
* Multiplication - Multiplies two numbers: n1 * n2.
* Division - divides number two into number one: n1 / n2.

2. Used JButton for the numbers and functions.

3. Used Jmenu for File and help.
4. Created a class to respond to the events caused by numbers, functions, exit, help and about functionality.

5. Used BorderLayout to layout various components in the Calculator Frame. A BorderLayout lays out a container, arranging
and resizing its components to fit in five regions: north, south, east, west, and center.

Java Calculator Source Code


Oct 15, 2006 by Hemanth

/*
 Name: Hemanth. B
 Website: wwww.java-swing-tutorial.html
 Topic: A basic Java Swing Calculator
 Conventions Used in Source code

 ---------------------------------

 1. All JLabel components start with jlb*

 2. All JPanel components start with jpl*

 3. All JMenu components start with jmenu*

 4. All JMenuItem components start with jmenuItem*

 5. All JDialog components start with jdlg*

 6. All JButton components start with jbn*

 */
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 {

	// Variables
	final int MAX_INPUT_LENGTH = 20;
	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(String name, int style, int size)

	 Creates a new Font from the specified name, style and point size.

	 */
	Font f12 = new Font("Times New Roman", 0, 12);
	Font f121 = new Font("Times New Roman", 1, 12);
	// Constructor 
	public Calculator() {
		/* Set Up the JMenuBar.

		 * Have Provided All JMenu's with Mnemonics

		 * Have Provided some JMenuItem components with Keyboard Accelerators

		 */
		jmenuFile = new JMenu("File");
		jmenuFile.setFont(f121);
		jmenuFile.setMnemonic(KeyEvent.VK_F);
		jmenuitemExit = new JMenuItem("Exit");
		jmenuitemExit.setFont(f12);
		jmenuitemExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,
				ActionEvent.CTRL_MASK));
		jmenuFile.add(jmenuitemExit);
		jmenuHelp = new JMenu("Help");
		jmenuHelp.setFont(f121);
		jmenuHelp.setMnemonic(KeyEvent.VK_H);
		jmenuitemAbout = new JMenuItem("About Calculator");
		jmenuitemAbout.setFont(f12);
		jmenuHelp.add(jmenuitemAbout);
		JMenuBar mb = new JMenuBar();
		mb.add(jmenuFile);
		mb.add(jmenuHelp);
		setJMenuBar(mb);
		//Set frame layout manager
		setBackground(Color.gray);
		jplMaster = new JPanel();
		jlbOutput = new JLabel("0");
		jlbOutput.setHorizontalTextPosition(JLabel.RIGHT);
		jlbOutput.setBackground(Color.WHITE);
		jlbOutput.setOpaque(true);
		// Add components to frame
		getContentPane().add(jlbOutput, BorderLayout.NORTH);
		jbnButtons = new JButton[23];
		//		GridLayout(int rows, int cols, int hgap, int vgap) 
		JPanel jplButtons = new JPanel(); // container for Jbuttons
		// Create numeric Jbuttons
		for (int i = 0; i <= 9; i++) {
			// set each Jbutton label to the value of index
			jbnButtons[i] = new JButton(String.valueOf(i));
		}
		// Create operator Jbuttons
		jbnButtons[10] = new JButton("+/-");
		jbnButtons[11] = new JButton(".");
		jbnButtons[12] = new JButton("=");
		jbnButtons[13] = new JButton("/");
		jbnButtons[14] = new JButton("*");
		jbnButtons[15] = new JButton("-");
		jbnButtons[16] = new JButton("+");
		jbnButtons[17] = new JButton("sqrt");
		jbnButtons[18] = new JButton("1/x");
		jbnButtons[19] = new JButton("%");
		jplBackSpace = new JPanel();
		jplBackSpace.setLayout(new GridLayout(1, 1, 2, 2));
		jbnButtons[20] = new JButton("Backspace");
		jplBackSpace.add(jbnButtons[20]);
		jplControl = new JPanel();
		jplControl.setLayout(new GridLayout(1, 2, 2, 2));
		jbnButtons[21] = new JButton(" CE ");
		jbnButtons[22] = new JButton("C");
		jplControl.add(jbnButtons[21]);
		jplControl.add(jbnButtons[22]);
		//		Setting all Numbered JButton's to Blue. The rest to Red
		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);
		}
		// Set panel layout manager for a 4 by 5 grid
		jplButtons.setLayout(new GridLayout(4, 5, 2, 2));
		//Add buttons to keypad panel starting at top left
		// First row
		for (int i = 7; i <= 9; i++) {
			jplButtons.add(jbnButtons[i]);
		}
		// add button / and sqrt
		jplButtons.add(jbnButtons[13]);
		jplButtons.add(jbnButtons[17]);
		// Second row
		for (int i = 4; i <= 6; i++) {
			jplButtons.add(jbnButtons[i]);
		}
		// add button * and x^2
		jplButtons.add(jbnButtons[14]);
		jplButtons.add(jbnButtons[18]);
		// Third row
		for (int i = 1; i <= 3; i++) {
			jplButtons.add(jbnButtons[i]);
		}
		//adds button - and %
		jplButtons.add(jbnButtons[15]);
		jplButtons.add(jbnButtons[19]);
		//Fourth Row
		// add 0, +/-, ., +, and =
		jplButtons.add(jbnButtons[0]);
		jplButtons.add(jbnButtons[10]);
		jplButtons.add(jbnButtons[11]);
		jplButtons.add(jbnButtons[16]);
		jplButtons.add(jbnButtons[12]);
		jplMaster.setLayout(new BorderLayout());
		jplMaster.add(jplBackSpace, BorderLayout.WEST);
		jplMaster.add(jplControl, BorderLayout.EAST);
		jplMaster.add(jplButtons, BorderLayout.SOUTH);
		// Add components to frame
		getContentPane().add(jplMaster, BorderLayout.SOUTH);
		requestFocus();
		//activate ActionListener
		for (int i = 0; i < jbnButtons.length; i++) {
			jbnButtons[i].addActionListener(this);
		}
		jmenuitemAbout.addActionListener(this);
		jmenuitemExit.addActionListener(this);
		clearAll();
		//add WindowListener for closing frame and ending program
		addWindowListener(new WindowAdapter() {

			public void windowClosed(WindowEvent e) {
				System.exit(0);
			}
		});
	} //End of Contructor Calculator
	// Perform action
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);

		}	



	// Search for the button pressed until end of array or key found

		for (int i=0; i 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 the input string already contains a decimal point, don't
		//  do anything to it.
		if (inputString.indexOf(".") < 0)
			setDisplayString(new String(inputString + "."));
	}
	void processSignChange() {
		if (displayMode == INPUT_MODE) {
			String input = getDisplayString();
			if (input.length() > 0 && !input.equals("0")) {
				if (input.indexOf("-") == 0)
					setDisplayString(input.substring(1));
				else
					setDisplayString("-" + input);
			}
		} else if (displayMode == RESULT_MODE) {
			double numberInDisplay = getNumberInDisplay();
			if (numberInDisplay != 0)
				displayResult(-numberInDisplay);
		}
	}
	void clearAll() {
		setDisplayString("0");
		lastOperator = "0";
		lastNumber = 0;
		displayMode = INPUT_MODE;
		clearOnNextDigit = true;
	}
	void clearExisting() {
		setDisplayString("0");
		clearOnNextDigit = true;
		displayMode = INPUT_MODE;
	}
	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();
		//		contentPane.setLayout(new BorderLayout());
		calci.setTitle("Java Swing Calculator");
		calci.setSize(241, 217);
		calci.pack();
		calci.setLocation(400, 250);
		calci.setVisible(true);
		calci.setResizable(false);
	}
} //End of Swing Calculator Class.

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:	Hemanth\n");
		text.append("Version:	1.0");
		JTextArea jtAreaAbout = new JTextArea(5, 21);
		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(408, 270);
		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();
		}
	}
}

Download Java Calculator Source Code

 
    Java is a trademark of Sun Microsystems, Inc.
| | |
© Copyright 2007-08 javabeginner.com