We were asked to make a simple GUI calculator, I used getSource() to detect the buttons, cause that's what they taught us. It works by typing the 1st and 2nd value then choosing the operation, it worked. But I made a mistake, because what they want us to do is that the numbers should also be buttons, just like a real calculator. so how do i get the value of each button using getSource()? like when I press button 1 and 2 is equal to 3. heres what ive done
import java.awt.*;
import java.awt.event.*;
public class SimpleCalculator implements ActionListener
{
// containers
private Frame f;
private Panel p1, p2, p3, p4;
// components
private Label l1, l2, l3;
private TextField tf1, tf2, tf3;
private Button bAdd, bSub, bMul, bDiv, bClear;
public SimpleCalculator()
{
f = new Frame("My First GUI App");
p1 = new Panel();
p2 = new Panel();
p3 = new Panel();
p4 = new Panel();
l1 = new Label("First: ");
l2 = new Label("Second: ");
l3 = new Label("Result: ");
tf1 = new TextField(15);
tf2 = new TextField(15);
tf3 = new TextField(15);
bAdd = new Button("+");
bSub = new Button("-");
bMul = new Button("*");
bDiv = new Button("/");
bClear = new Button("C");
}
public void launchFrame()
{
// use default layout manager of the Panel (FlowLayout)
p1.add(l1);
p1.add(tf1);
p2.add(l2);
p2.add(tf2);
p3.add(l3);
p3.add(tf3);
p4.add(bAdd);
p4.add(bSub);
p4.add(bMul);
p4.add(bDiv);
p4.add(bClear);
// change the layout manager of the Frame,
// use GridLayout(4, 1)
f.setLayout(new GridLayout(4, 1));
f.add(p1);
f.add(p2);
f.add(p3);
f.add(p4);
f.pack();
f.setVisible(true);
// register event handlers
bAdd.addActionListener(this);
bSub.addActionListener(this);
bMul.addActionListener(this);
bDiv.addActionListener(this);
bClear.addActionListener(this);
f.addWindowListener(new MyCloseButtonHandler());
}
// override the actionPerformed method
public void actionPerformed(ActionEvent ae)
{
Object source = ae.getSource();
double num1, num2, result = 0.0;
if (tf1.getText() != null && tf2.getText() != null)
{
num1 = Double.parseDouble(tf1.getText());
num2 = Double.parseDouble(tf2.getText());
if (source == bAdd)
result = num1 + num2;
else if (source == bSub)
result = num1 - num2;
else if (source == bMul)
result = num1 * num2;
else if (source == bDiv)
result = num1 / num2;
else if (source == bClear)
{
tf1.setText("0.0");
tf2.setText("0.0");
tf3.setText("0.0");
}
else {}
// tf3.setText(new Double(result).toString());
tf3.setText("" + result);
}
}
private class MyCloseButtonHandler extends WindowAdapter
{
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
}
public static void main(String args[])
{
SimpleCalculator sc = new SimpleCalculator();
sc.launchFrame();
}
}