Search code examples
javagettextsettext

Attempting to write code for a simple calculator. Trouble displaying text in textbox when user presses a button


Towards the end of my code I write if commands using getActionCommand to see what button the user presses. I want to make it so that whatever the user presses will be added to the textbox so they can see what they are entering. For some reason whatever number I press first seems to show up for all the rest of the numbers thereafter. How can I fix this?

//Michael Moradi
//Period C1
//June 2, 2015
//Final Project Semester 2

import javax.swing.*; //imports all that is needed for the code

import java.awt.*;
import java.awt.event.*;

public class Calculator extends JFrame implements ActionListener {

    public JButton button1, button2, button3, button4, button5, button6, button7, 
                   button8, button9, button10, button11, button12, button13, button14, 
                   button15, button16;
    public JTextArea text;

    public Calculator()
    {
        setSize(350,300); //sets size to 300 by 300 //LOOK UP HOW TO LOCK SIZE
        setResizable(false); //does not let user change the size of the window
        setDefaultCloseOperation(EXIT_ON_CLOSE);//makes app close when I press the x on the top left

        Container contentPane = getContentPane();//gets the contentPane
        contentPane.setBackground(Color.CYAN);//sets background color to white         

        contentPane.setLayout(new FlowLayout());//makes the contentPane read from left to right

        text = new JTextArea(1, 25);
        contentPane.add(text);
        text.setEditable(false);

        button1 = new JButton ("7");
        contentPane.add(button1);
        button1.addActionListener(this);

        button2 = new JButton ("8");
        contentPane.add(button2);
        button2.addActionListener(this);

        button3 = new JButton ("9");
        contentPane.add(button3);
        button3.addActionListener(this);

        button4 = new JButton ("÷");
        contentPane.add(button4);
        button4.addActionListener(this);

        button5 = new JButton ("4");
        contentPane.add(button5);
        button5.addActionListener(this);

        button6 = new JButton ("5");
        contentPane.add(button6);
        button6.addActionListener(this);

        button7 = new JButton ("6");
        contentPane.add(button7);
        button7.addActionListener(this);

        button8 = new JButton ("x");
        contentPane.add(button8);
        button8.addActionListener(this);

        button9 = new JButton ("1");
        contentPane.add(button9);
        button9.addActionListener(this);

        button10 = new JButton ("2");
        contentPane.add(button10);
        button10.addActionListener(this);

        button11 = new JButton ("3");
        contentPane.add(button11);
        button11.addActionListener(this);

        button12 = new JButton ("-");
        contentPane.add(button12);
        button12.addActionListener(this);

        button13 = new JButton ("0");
        contentPane.add(button13);
        button13.addActionListener(this);

        button14 = new JButton (".");
        contentPane.add(button14);
        button14.addActionListener(this);

        button15 = new JButton ("=");
        contentPane.add(button15);
        button15.addActionListener(this);

        button16 = new JButton ("+");
        contentPane.add(button16);
        button16.addActionListener(this);



    }

    public static void main(String[] args)
    {
        Calculator guiWindow = new Calculator(); //uses GUI
        guiWindow.setVisible(true); //makes it visible

    }

    public void actionPerformed(ActionEvent e)
    {
        Container contentPane = getContentPane();

        String enteredNumbers = text.getText();

        if (e.getActionCommand().equals("7"));
        text.setText(enteredNumbers + ("7"));

        if (e.getActionCommand().equals("8"));
        text.setText(enteredNumbers + ("8"));

        if (e.getActionCommand().equals("9"));
        text.setText(enteredNumbers + ("9"));

        if (e.getActionCommand().equals("÷"));
        text.setText(enteredNumbers + ("÷"));

        if (e.getActionCommand().equals("4"));
        text.setText(enteredNumbers + ("4"));

        if (e.getActionCommand().equals("5"));
        text.setText(enteredNumbers + ("5"));

        if (e.getActionCommand().equals("6"));
        text.setText(enteredNumbers + ("6"));

        if (e.getActionCommand().equals("x"));
        text.setText(enteredNumbers + ("x"));

        if (e.getActionCommand().equals("1"));
        text.setText(enteredNumbers + ("1"));

        if (e.getActionCommand().equals("2"));
        text.setText(enteredNumbers + ("2"));

        if (e.getActionCommand().equals("3"));
        text.setText(enteredNumbers + ("3"));

        if (e.getActionCommand().equals("-"));
        text.setText(enteredNumbers + ("-"));

        if (e.getActionCommand().equals("0"));
        text.setText(enteredNumbers + ("0"));

        if (e.getActionCommand().equals("."));
        text.setText(enteredNumbers + ("."));

        if (e.getActionCommand().equals("="));
        text.setText(enteredNumbers + ("="));

        if (e.getActionCommand().equals("+"));
        text.setText(enteredNumbers + ("+"));



    }

}

Solution

  • You have semicolons directly after each if-statement. This semicolon is an empty statement, cause an if statement needn't a semicolon at the end. An empty statement (just a semicolon) just does nothing and completes normaly without error.

    Now an empty statement at the end of an if statement means, that if the expression of the if statement evaluates to true, nothing will be done and the next statement is executed whether or not the if statement returns true.

    So instead of

    if (e.getActionCommand().equals("7"));
        text.setText(enteredNumbers + ("7"));
    

    use this

    if (e.getActionCommand().equals("7"))
        text.setText(enteredNumbers + ("7"));