Tag: Import Java
Java: Calculation Class
by Russell on Jan.14, 2009, under Software Development
Calculation Class
Description
Provides a mechanism to hold value of previous calculations, and then make new calculations with this value.
The way this class works is to hold value representing the current value of the calculator and a value repesenting the next operation (addition, multiplication etc) that needs to take place. Subsequent calls to public double calculate( double newValue, char newOperation ) result in the current calculator value being adjusted and the next operation value being replaced with the next new one.
Source
/*
* Calculation
*
* This class receives numbers and operators and performs running calculations
* Includes methods for accessing the state of the receiver
*
* Russell Smithers - 28th October 2006
*
*/
import java.util.*;
public class Calculation
{
private double currentValue; // Current value of calculation
private char nextOperation; // Operation to carry out when next value received
/**
* Constructor
*/
public Calculation()
{
this.currentValue = 0.0; this.nextOperation = '+';
}
/**
* Calculates and sets a new value for the receiver based upon the receivers next oparator
* its current value, and the value passed in, and then sets the next operation of the
* receiver to the operation passed in.
*/
public double calculate( double newValue, char newOperation )
{
double result;
char op = this.getOperation();
result = Calculation.calculate(this.getValue(), this.getOperation(), newValue);
this.setValue( result );
this.setOperation( newOperation );
return result;
}
/**
* Performs a calculation on an (number operator number)
*/
public static double calculate( double leftSide, char howCalc, double rightSide )
{
double result=0.0;
try
{
//result = leftSide + howCalc + rightSide;
switch(howCalc)
{
case '+': result = leftSide + rightSide; break;
case '-': result = leftSide - rightSide; break;
case '*': result = leftSide * rightSide; break;
case '/': result = leftSide / rightSide; break;
}
}
catch(Exception anError)
{
System.out.println("Calculation.calculate() - " + leftSide + " " + howCalc + rightSide + ": " +anError);
}
System.out.println("calculate(double, char, double) " + result );
return result;
}
/**
* Changes the receiver to be the result of a calculation between itself and newCalc
* The calculation is the same as; public void calculate( double newValue, char newOperation )
*/
public double calculate( Calculation newCalc )
{
return this.calculate( newCalc.getValue(), newCalc.getOperation() );
}
/**
* Returns true if the operation to be tested is one that this Calculation can deal with
*/
public static boolean operationValid(char testOperation)
{
boolean valid;
switch(testOperation)
{
case '+':
case '-':
case '*':
case '/':
case '=':
valid=true;
break;
default: valid=false;
}
return valid;
}
/**
* Sets the current value of the receiver
*/
public void setValue(double newValue)
{ this.currentValue = newValue; }
/**
* Sets the nextOperation of the receiver
* returns true if succesfull
*/
public boolean setOperation( char newOperation )
{
if ( Calculation.operationValid( newOperation ) )
{
// If operation is equals set it to plus
this.nextOperation = ( newOperation == '=' ? '+' : newOperation);
return true;
}
return false;
}
/**
* Returns the current value of the receiver
*/
public double getValue() { return this.currentValue; }
/**
* Returns the nextOperation of the receiver
*/
public char getOperation() { return this.nextOperation; }
/**
* Returns a string representation of the receiver
*/
public String toString()
{
return "The current value is " + currentValue + " and the next operation to be performed is " + nextOperation;
}
}
Java: Calculator Class
by Russell on Jan.14, 2009, under Software Development
Calculator Class
Description
Provides the graphical user interface of the calculator. Looking at the code you will see the method;
public void actionPerformed(ActionEvent e)
which is the central hub of the Calculator, it is the point at which the user actions (events) are turned into sequences of actions that result in calculations being performed, and their result being shown to the user.
Source
/*
* Calculator
*
* Russell Smithers
* 26 October 2006
*
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Calculator implements ActionListener
{
// Display area references
public JPanel mainPanel, selectPanel, displayPanel, actionPanel, memoryPanel;
private JLabel displayScreen;
// Calculation references and variables
Calculation currentCalc;
StringBuilder screenValue;
double value;
char valueInput;
/**
* Create a GUI Calculator - sets up swing with relevant controls
*/
public Calculator()
{
// Main panel that holds all controls
mainPanel = new JPanel();
mainPanel.setLayout(new GridLayout(0,2));
mainPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
// Screen areas
this.displayPanel = this.addPanel("Result",0,0);
this.memoryPanel = this.addPanel("Memory",0,1);
this.selectPanel = this.addPanel("Keypad",0,3);
this.actionPanel = this.addPanel("Operations",0,1);
// Number buttons
for (int button=9; button>=0; button--)
{ this.addButton(selectPanel, "" + button); }
this.addButton(selectPanel, ".");
this.addButton(selectPanel, "Clr");
// Operation buttons
this.addButton(actionPanel, "+");
this.addButton(actionPanel, "-");
this.addButton(actionPanel, "/");
this.addButton(actionPanel, "*");
this.addButton(actionPanel, "=");
// Output area
displayScreen = new JLabel();
this.displayPanel.add( displayScreen );
screenValue = new StringBuilder();
currentCalc = new Calculation();
}
/**
* Event handler which handles all input
*/
public void actionPerformed(ActionEvent e)
{
// System.out.println("Button pressed: " + e.getActionCommand() );
String valueOrig = e.getActionCommand();
this.valueInput = valueOrig.charAt(0);
if ( Calculation.operationValid(valueInput) )
{
try
{
this.value = Double.valueOf(screenValue.toString()).doubleValue();
}
catch(Exception anError)
{
this.value = 0.0;
}
currentCalc.calculate( this.value, valueInput);
this.updateDisplay();
}
else
{
if ( Character.isDigit(this.valueInput) || this.valueInput == '.')
{
screenValue.append( this.valueInput );
this.displayScreen.setText( screenValue.toString() );
}
else
{
switch(this.valueInput)
{
case 'C': currentCalc.setValue(0.0);
}
this.updateDisplay();
}
}
}
/**
* Set calculator value
*/
public void updateDisplay()
{
this.displayScreen.setText( Double.toString(currentCalc.getValue()) );
this.screenValue = new StringBuilder();
}
/**
* Add a button with an ActionListener and then add it to a panel
*/
private void addButton(JPanel p, String value)
{
JButton tempButton = new JButton(value);
tempButton.addActionListener(this);
p.add(tempButton);
}
/**
* Adds a new panel the main container panel and sets default decoration
*/
private JPanel addPanel(String title, int x, int y)
{
JPanel tempPanel = new JPanel();
// Set GridLayout is we have relevant values to use on
if ( (x > 0) || (y >0) )
{ tempPanel.setLayout(new GridLayout(x,y)); }
// Set the panel decoration
tempPanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder(title), BorderFactory.createEmptyBorder(5,5,5,5)));
// Add ths panel to the main one
this.mainPanel.add(tempPanel);
return tempPanel;
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI()
{
//Make sure we have nice window decorations.
JFrame.setDefaultLookAndFeelDecorated(true);
Calculator calcy = new Calculator();
//Create and set up the window.
JFrame calculatorFrame = new JFrame("Calculator v1.0 (rsmithers.net)");
calculatorFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
calculatorFrame.setContentPane(calcy.mainPanel);
//Display the window.
calculatorFrame.pack();
calculatorFrame.setVisible(true);
}
/**
* Entry point for Calculator program
*/
public static void main(String[] args)
{
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
}
}