0% found this document useful (0 votes)
7 views11 pages

Java Swing Basic Calculator Tutorial

Uploaded by

manish0009
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views11 pages

Java Swing Basic Calculator Tutorial

Uploaded by

manish0009
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

/*

Name: Hemanth. B
Website: [Link]
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 [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
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");
[Link](f121);
[Link](KeyEvent.VK_F);
jmenuitemExit = new JMenuItem("Exit");
[Link](f12);
[Link]([Link]( KeyEvent.VK_X,
ActionEvent.CTRL_MASK));
[Link](jmenuitemExit);
jmenuHelp = new JMenu("Help");
[Link](f121);
[Link](KeyEvent.VK_H);
jmenuitemAbout = new JMenuItem("About Calculator");
[Link](f12);
[Link](jmenuitemAbout);
JMenuBar mb = new JMenuBar();
[Link](jmenuFile);
[Link](jmenuHelp);
setJMenuBar(mb);
//Set frame layout manager
setBackground([Link]);
jplMaster = new JPanel();
jlbOutput = new JLabel("0");
[Link]([Link]);
[Link]([Link]);
[Link](true);
// Add components to frame
getContentPane().add(jlbOutput, [Link]);
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([Link](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();
[Link](new GridLayout(1, 1, 2, 2));
jbnButtons[20] = new JButton("Backspace");
[Link](jbnButtons[20]);
jplControl = new JPanel();
[Link](new GridLayout(1, 2, 2 ,2));
jbnButtons[21] = new JButton(" CE ");
jbnButtons[22] = new JButton("C");
[Link](jbnButtons[21]);
[Link](jbnButtons[22]);
// Setting all Numbered JButton's to Blue. The rest to Red
for (int i=0; i<[Link]; i++) {
jbnButtons[i].setFont(f12);
if (i<10)
jbnButtons[i].setForeground([Link]);
else
jbnButtons[i].setForeground([Link]);
}
// Set panel layout manager for a 4 by 5 grid
[Link](new GridLayout(4, 5, 2, 2));
//Add buttons to keypad panel starting at top left
// First row
for(int i=7; i<=9; i++) {
[Link](jbnButtons[i]);
}
// add button / and sqrt
[Link](jbnButtons[13]);
[Link](jbnButtons[17]);
// Second row
for(int i=4; i<=6; i++)
{
[Link](jbnButtons[i]);
}
// add button * and x^2
[Link](jbnButtons[14]);
[Link](jbnButtons[18]);
// Third row
for( int i=1; i<=3; i++)
{
[Link](jbnButtons[i]);
}
//adds button - and %
[Link](jbnButtons[15]);
[Link](jbnButtons[19]);
//Fourth Row
// add 0, +/-, ., +, and =
[Link](jbnButtons[0]);
[Link](jbnButtons[10]);
[Link](jbnButtons[11]);
[Link](jbnButtons[16]);
[Link](jbnButtons[12]);

[Link](new BorderLayout());
[Link](jplBackSpace, [Link]);
[Link](jplControl, [Link]);
[Link](jplButtons, [Link]);
// Add components to frame
getContentPane().add(jplMaster, [Link]);
requestFocus();
//activate ActionListener
for (int i=0; i<[Link]; i++){
jbnButtons[i].addActionListener(this);
}
[Link](this);
[Link](this);
clearAll();
//add WindowListener for closing frame and ending program
addWindowListener(new WindowAdapter() {
public void windowClosed(WindowEvent e)
{
[Link](0);
}
}
);
} //End of Contructor Calculator
// Perform action
public void actionPerformed(ActionEvent e){
double result = 0;
if([Link]() == jmenuitemAbout){
JDialog dlgAbout = new CustomABOUTDialog(this,
"About Java Swing Calculator", true);
[Link](true);
}else if([Link]() == jmenuitemExit){
[Link](0);
}
// Search for the button pressed until end of array or key found
for (int i=0; i<[Link]; i++)
{
if([Link]() == 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: // +/-
processSignChange();
break;
case 11: // decimal point
addDecimalPoint();
break;
case 12: // =
processEquals();
break;
case 13: // divide
processOperator("/");
break;
case 14: // *
processOperator("*");
break;
case 15: // -
processOperator("-");
break;
case 16: // +
processOperator("+");
break;
case 17: // sqrt
if (displayMode != ERROR_MODE)
{
try
{
if (getDisplayString().indexOf("-") == 0)
displayError("Invalid input for function!");
result = [Link](getNumberInDisplay());
displayResult(result);
}
catch(Exception ex)
{
displayError("Invalid input for function!");
displayMode = ERROR_MODE;
}
}
break;
case 18: // 1/x
if (displayMode != ERROR_MODE){
try
{
if (getNumberInDisplay() == 0)
displayError("Cannot divide by zero!");
result = 1 / getNumberInDisplay();
displayResult(result);
}
catch(Exception ex) {
displayError("Cannot divide by zero!");
displayMode = ERROR_MODE;
}
}
break;
case 19: // %
if (displayMode != ERROR_MODE){
try {
result = getNumberInDisplay() / 100;
displayResult(result);
}
catch(Exception ex) {
displayError("Invalid input for function!");
displayMode = ERROR_MODE;
}
}
break;
case 20: // backspace
if (displayMode != ERROR_MODE){
setDisplayString(getDisplayString().substring(0,
getDisplayString().length() - 1));
if (getDisplayString().length() < 1)
setDisplayString("0");
}
break;
case 21: // CE
clearExisting();
break;
case 22: // C
clearAll();
break;
}
}
}
}
void setDisplayString(String s){
[Link](s);
}
String getDisplayString (){
return [Link]();
}
void addDigitToDisplay(int digit){
if (clearOnNextDigit)
setDisplayString("");
String inputString = getDisplayString();
if ([Link]("0") == 0){
inputString = [Link](1);
}
if ((![Link]("0") || digit > 0)
&& [Link]() < 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 ([Link](".") < 0)
setDisplayString(new String(inputString + "."));
}
void processSignChange(){
if (displayMode == INPUT_MODE)
{
String input = getDisplayString();
if ([Link]() > 0 && ![Link]("0"))
{
if ([Link]("-") == 0)
setDisplayString([Link](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 = [Link]();
return [Link](input);
}
void processOperator(String op) {
if (displayMode != ERROR_MODE)
{
double numberInDisplay = getNumberInDisplay();
if (![Link]("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 ([Link]("/"))
{
if (numberInDisplay == 0)
throw (new DivideByZeroException());
result = lastNumber / numberInDisplay;
}
if ([Link]("*"))
result = lastNumber * numberInDisplay;
if ([Link]("-"))
result = lastNumber - numberInDisplay;
if ([Link]("+"))
result = lastNumber + numberInDisplay;
return result;
}
void displayResult(double result){
setDisplayString([Link](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 = [Link]();
// [Link](new BorderLayout());
[Link]("Java Swing Calculator");
[Link](241, 217);
[Link]();
[Link](400, 250);
[Link](true);
[Link](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([Link]);
JPanel p1 = new JPanel(new FlowLayout([Link]));
StringBuffer text = new StringBuffer();
[Link]("Calculator Information\n\n");
[Link]("Developer: Hemanth\n");
[Link]("Version: 1.0");
JTextArea jtAreaAbout = new JTextArea(5, 21);
[Link]([Link]());
[Link](new Font("Times New Roman", 1, 13));
[Link](false);
[Link](jtAreaAbout);
[Link]([Link]);
getContentPane().add(p1, [Link]);
JPanel p2 = new JPanel(new FlowLayout([Link]));
jbnOk = new JButton(" OK ");
[Link](this);
[Link](jbnOk);
getContentPane().add(p2, [Link]);
setLocation(408, 270);
setResizable(false);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e)
{
Window aboutDialog = [Link]();
[Link]();
}
}
);
pack();
}
public void actionPerformed(ActionEvent e)
{
if([Link]() == jbnOk) {
[Link]();
}
}
}

You might also like