In: Computer Science
Please use Java language in an easy way with comments! Thanks!
Create a calculator that uses an array of buttons for numbers from 0-9, the . for decimals, and for operators +, -, * ,/ and = as well as a JTextfield that displays the current value or the result. Use ActionListeners and LayoutManagers appropriately.
The example below shows how to determine which button has been clicked.
ActionListener actionListener = new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { System.out.println(actionEvent.getActionCommand()); } };
CODE IN JAVA:
Calculator.java file:
// Java program to create a simple calculator
// with basic +, -, /, * using java swing elements
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
class Calculator extends JFrame implements ActionListener {
// creating a textfield
static JTextField l;
// storing oprerator and operands
String s0, s1, s2;
// default constrcutor
Calculator()
{
s0 = s1 = s2 = "";
}
// main method
public static void main(String args[])
{
// creating a frame
JFrame f = new
JFrame("calculator");
// creating a object of class
Calculator c = new
Calculator();
// creating a textfield
l = new JTextField(16);
// setting the textfield to non
editable
l.setEditable(false);
// creating number buttons and
some operators
JButton b0, b1, b2, b3, b4, b5, b6,
b7, b8, b9, ba, bs, bd, bm, be, beq, beq1;
// creating number buttons
b0 = new JButton("0");
b1 = new JButton("1");
b2 = new JButton("2");
b3 = new JButton("3");
b4 = new JButton("4");
b5 = new JButton("5");
b6 = new JButton("6");
b7 = new JButton("7");
b8 = new JButton("8");
b9 = new JButton("9");
// creating equals button
beq1 = new JButton("=");
// creating operator
buttons
ba = new JButton("+");
bs = new JButton("-");
bd = new JButton("/");
bm = new JButton("*");
beq = new JButton("C");
// creating . button
be = new JButton(".");
// create a panel
JPanel p = new JPanel();
// adding action listeners
bm.addActionListener(c);
bd.addActionListener(c);
bs.addActionListener(c);
ba.addActionListener(c);
b9.addActionListener(c);
b8.addActionListener(c);
b7.addActionListener(c);
b6.addActionListener(c);
b5.addActionListener(c);
b4.addActionListener(c);
b3.addActionListener(c);
b2.addActionListener(c);
b1.addActionListener(c);
b0.addActionListener(c);
be.addActionListener(c);
beq.addActionListener(c);
beq1.addActionListener(c);
// adding elements to
panel
p.add(l);
p.add(ba);
p.add(b1);
p.add(b2);
p.add(b3);
p.add(bs);
p.add(b4);
p.add(b5);
p.add(b6);
p.add(bm);
p.add(b7);
p.add(b8);
p.add(b9);
p.add(bd);
p.add(be);
p.add(b0);
p.add(beq);
p.add(beq1);
// add panel to frame
f.add(p);
f.setSize(200, 220);
f.show();
}
public void actionPerformed(ActionEvent e)
{
String str =
e.getActionCommand();
// if the value is a
number
if ((str.charAt(0) >= '0'
&& str.charAt(0) <= '9') || str.charAt(0) == '.')
{
// if operand is
present then add to second no
if
(!s1.equals(""))
s2 = s2 + str;
else
s0 = s0 + str;
// set the
value of text
l.setText(s0 +
s1 + s2);
}
else if (str.charAt(0) == 'C')
{
// clear the one
letter
s0 = s1 = s2 =
"";
// set the
value of text
l.setText(s0 +
s1 + s2);
}
else if (str.charAt(0) == '=')
{
double te;
// store the
value in 1st
if
(s1.equals("+"))
te = (Double.parseDouble(s0) +
Double.parseDouble(s2));
else if
(s1.equals("-"))
te = (Double.parseDouble(s0) -
Double.parseDouble(s2));
else if
(s1.equals("/"))
te = (Double.parseDouble(s0) /
Double.parseDouble(s2));
else
te = (Double.parseDouble(s0) *
Double.parseDouble(s2));
// set the
value of text
l.setText(s0 +
s1 + s2 + "=" + te);
// convert it
to string
s0 =
Double.toString(te);
s1 = s2 =
"";
}
else {
// if there was
no operand
if
(s1.equals("") || s2.equals(""))
s1 = str;
// else
evaluate
else {
double te;
// store the value in 1st
if (s1.equals("+"))
te = (Double.parseDouble(s0)
+ Double.parseDouble(s2));
else if (s1.equals("-"))
te = (Double.parseDouble(s0)
- Double.parseDouble(s2));
else if (s1.equals("/"))
te = (Double.parseDouble(s0)
/ Double.parseDouble(s2));
else
te = (Double.parseDouble(s0)
* Double.parseDouble(s2));
// convert it to string
s0 = Double.toString(te);
// place the operator
s1 = str;
// make the operand blank
s2 = "";
}
// set the
value of text
l.setText(s0 +
s1 + s2);
}
}
}
OUTPUT: