Simple Calculator Project in JAVA
Simple Calculator in JAVA
This is a simple java calculator project to calculate basic arithmetic operations using GUI features of Java extending JFrame Class. The source code is organized in two files. They are:1. Main.java and
2. Calc_Frame.java
Before actually digging deeper into the source code, lets first see the the output of the project tested with an input expression 9/2*3 whose obvious output after calculation is 13.5
Here are the snapshots:
Figure: Input of test expression 9/2*3
Figure: Result of test input expression.
1. Main.java
//Contents of the file "Main.java"/**
* Created by Bikal Adhikari on 12/18/2014.
*/
public class Main {
public static void main(String[] args) {
Calc_Frame m=new Calc_Frame("BKL-Calculator");
}
}
2. Calc_Frame.java
//Contents of the file "Calc_Frame.java"/**
* Created by Bikal Adhikari on 12/18/2014.
*/
import java.awt.Container;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Calc_Frame extends JFrame {
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
/*Text Field For emulating Calculator Screen*/
JTextArea CalcScreen = new JTextArea();
/*Defining Buttons For keys of Calculator*/
JButton b0 = new JButton("7");
JButton b1 = new JButton("8");
JButton b2 = new JButton("9");
JButton b3 = new JButton("/");
JButton b4 = new JButton("4");
JButton b5 = new JButton("5");
JButton b6 = new JButton("6");
JButton b7 = new JButton("*");
JButton b8 = new JButton("1");
JButton b9 = new JButton("2");
JButton b10 = new JButton("3");
JButton b11 = new JButton("-");
JButton b12 = new JButton("0");
JButton b13 = new JButton(".");
JButton b14 = new JButton("=");
JButton b15 = new JButton("+");
public Calc_Frame(String str) {
super(str);
Container c = getContentPane();
p1.setLayout(new GridLayout(1, 1, 10, 450));
p2.setLayout(new GridLayout(4, 4));
p1.add(CalcScreen);
CalcScreen.setEditable(false);
/*Adding Buttons to panel p2*/
p2.add(b0);
p2.add(b1);
p2.add(b2);
p2.add(b3);
p2.add(b4);
p2.add(b5);
p2.add(b6);
p2.add(b7);
p2.add(b8);
p2.add(b9);
p2.add(b8);
p2.add(b9);
p2.add(b10);
p2.add(b11);
p2.add(b12);
p2.add(b13);
p2.add(b14);
p2.add(b15);
/*Adding panels to container */
c.add(p1);
c.add(p2, BorderLayout.SOUTH);
/*Setting Size of the Frame*/
setSize(250, 200);
setVisible(true);
/*Handler for Button Event Handling*/
Handler h = new Handler();
/*Registering Handler into Action Listener*/
b0.addActionListener(h);
b1.addActionListener(h);
b2.addActionListener(h);
b3.addActionListener(h);
b4.addActionListener(h);
b5.addActionListener(h);
b6.addActionListener(h);
b7.addActionListener(h);
b8.addActionListener(h);
b9.addActionListener(h);
b10.addActionListener(h);
b11.addActionListener(h);
b12.addActionListener(h);
b13.addActionListener(h);
b14.addActionListener(h);
b15.addActionListener(h);
}
/*Class to handle event generated by the button press*/
class Handler implements ActionListener {
int pos=0;
public void actionPerformed(ActionEvent e) {
if (e.getSource() == b0) {
pos = CalcScreen.getCaretPosition(); //get the cursor position
CalcScreen.insert("7",pos);
}
if (e.getSource() == b1) {
pos = CalcScreen.getCaretPosition(); //get the cursor position
CalcScreen.insert("8",pos);
}
if (e.getSource() == b2) {
pos = CalcScreen.getCaretPosition(); //get the cursor position
CalcScreen.insert("9",pos);
}
if (e.getSource() == b3) {
pos = CalcScreen.getCaretPosition(); //get the cursor position
CalcScreen.insert("/",pos);
}
if (e.getSource() == b4) {
pos = CalcScreen.getCaretPosition(); //get the cursor position
CalcScreen.insert("4",pos);
}
if (e.getSource() == b5) {
pos = CalcScreen.getCaretPosition(); //get the cursor position
CalcScreen.insert("5",pos);
}
if (e.getSource() == b6) {
pos = CalcScreen.getCaretPosition(); //get the cursor position
CalcScreen.insert("6",pos);
}
if (e.getSource() == b7) {
pos = CalcScreen.getCaretPosition(); //get the cursor position
CalcScreen.insert("*",pos);
}
if (e.getSource() == b8) {
pos = CalcScreen.getCaretPosition(); //get the cursor position
CalcScreen.insert("1",pos);
}
if (e.getSource() == b9) {
pos = CalcScreen.getCaretPosition(); //get the cursor position
CalcScreen.insert("2",pos);
}
if (e.getSource() == b10) {
pos = CalcScreen.getCaretPosition(); //get the cursor position
CalcScreen.insert("3",pos);
}
if (e.getSource() == b11) {
pos = CalcScreen.getCaretPosition(); //get the cursor position
CalcScreen.insert("-",pos);
}
if (e.getSource() == b12) {
pos = CalcScreen.getCaretPosition(); //get the cursor position
CalcScreen.insert("0",pos);
}
if (e.getSource() == b13) {
pos = CalcScreen.getCaretPosition(); //get the cursor position
CalcScreen.insert(".",pos);
}
//Equals to Button
if (e.getSource() == b14) {
String str=CalcScreen.getText();
double a=eval(str);
CalcScreen.setText(null);
String abc = Double.toString(a);
CalcScreen.insert(abc,0);
}
if (e.getSource() == b15) {
pos = CalcScreen.getCaretPosition(); //get the cursor position
CalcScreen.insert("+",pos);
}
}
}//Class Handler Ends Here
/**
* This Function performs job of parsing arithmetic expressions given to the calculator
* It basically supports parsing expression containing Division, Multiplication, Addition and Subtraction
* */
public static double eval(final String str) {
class Parser {//Nested Class
int pos = -1, c;
void eatChar() {
c = (++pos < str.length()) ? str.charAt(pos) : -1;
}
void eatSpace() {
while (Character.isWhitespace(c)) eatChar();
}
double parse() {
eatChar();
double v = parseExpression();
if (c != -1) throw new RuntimeException("Unexpected: " + (char)c);
return v;
}
// Grammar:
// expression = term | expression `+` term | expression `-` term
// term = factor | term `*` factor | term `/` factor | term brackets
// factor = brackets | number | factor `^` factor
// brackets = `(` expression `)`
double parseExpression() {
double v = parseTerm();
for (;;) {
eatSpace();
if (c == '+') { // addition
eatChar();
v += parseTerm();
} else if (c == '-') { // subtraction
eatChar();
v -= parseTerm();
} else {
return v;
}
}
}
double parseTerm() {
double v = parseFactor();
for (;;) {
eatSpace();
if (c == '/') { // division
eatChar();
v /= parseFactor();
} else if (c == '*' || c == '(') { // multiplication
if (c == '*') eatChar();
v *= parseFactor();
} else {
return v;
}
}
}
double parseFactor() {
double v;
boolean negate = false;
eatSpace();
if (c == '(') { // brackets
eatChar();
v = parseExpression();
if (c == ')') eatChar();
} else { // numbers
if (c == '+' || c == '-') { // unary plus & minus
negate = c == '-';
eatChar();
eatSpace();
}
StringBuilder sb = new StringBuilder();
while ((c >= '0' && c <= '9') || c == '.') {
sb.append((char)c);
eatChar();
}
if (sb.length() == 0) throw new RuntimeException("Unexpected: " + (char)c);
v = Double.parseDouble(sb.toString());
}
eatSpace();
if (c == '^') { // exponentiation
eatChar();
v = Math.pow(v, parseFactor());
}
if (negate) v = -v; // exponentiation has higher priority than unary minus: -3^2=-9
return v;
}
}
return new Parser().parse();
}
}//Class Calc_Frame ends here
All the necessary project files are included in this zipped archive. To download click here.
"Enjoy Learning"
Simple Calculator Project in JAVA
Reviewed by Active Cricket
on
January 11, 2015
Rating:
No comments