Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Java Assignment When pushing clear it should display 0.0 again. The user should

ID: 3917423 • Letter: J

Question

Java Assignment

When pushing clear it should display 0.0 again.

The user should not be allowed to enter a number without pushing an operator first.

When the code runs, it should display a Red, Yellow and Green circle in the left hand corner of the calculator.

Last the operator buttons appear to be a different size than the number buttons.

Here is the code that I have.

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

// the CalcGUI class defines a GUI for a calculator   *
public class CalcGUI extends JFrame {
    // create sentinal values that are triggered when an operation is being performed
    boolean addS = false;
    boolean subtractS = false;
    boolean divideS = false;
    boolean multiplyS = false;
    boolean decimalS = false;
    boolean newNumberEntered = false;   // true if the last event was a digit being entered

    // Create a new MemoryCalc Object
    MemoryCalc calc = new MemoryCalc();

    // Create an = button to the bottom of the GUI
    private JButton equals = new JButton("=");

    // Create a text field for the top of the GUI
    private JTextField topText = new JTextField("0.0");

    // create an array of buttons for the center panel
    private JButton[] buttons = new JButton[12];

    // create an array of text for the center button panel
    private String[] buttonNames = { "1", "2", "3",
            "4", "5", "6",
            "7", "8", "9",
            "0", ".", "C",
    };

    // create buttons for the operators and add them to the east panel
    private JButton plus = new JButton("     +     ");
    private JButton minus = new JButton("-");
    private JButton multiply = new JButton("*");
    private JButton divide = new JButton("/");

    private String topNumber = "";   // The string that is displayed on the calculator

    public CalcGUI() {
        // Set layout with 10 px horizontal gap and 10 px vertical gap
        setLayout(new BorderLayout(10, 10));

        // define White (for topText)
        Color white = new Color(255, 255, 255);

        // set the top text field so that it cannot be changed by the user
        topText.setEditable(false);

        // Change topText color to white
        topText.setBackground(white);

        // change the top text field font to a bold 20pt mono font
        Font topTextFont = new Font("monospace", Font.BOLD, 20);
        topText.setFont(topTextFont);

        // add the top text field to the top of the GUI
        add(topText, BorderLayout.NORTH);


        // add equals to the bottom of the calculator
        add(equals, BorderLayout.SOUTH);

        // register equals listener
        equals.addActionListener(new EqualsListener());

        // Create a 3X3 panel for the center of the GUI
        // with 10px horizontal gap and 5px vertical gap
        JPanel pCenter = new JPanel();
        pCenter.setLayout(new GridLayout(4, 3, 10, 10));

        // create the numerical buttons and add them to the center panel
        // and add action listeners
        for (int i = 0; i < 10; i++)
        {
            buttons[i] = new JButton(buttonNames[i]);
            pCenter.add(buttons[i]);
            buttons[i].addActionListener(new DigitListener());
        }

        // Create . and C buttons and add them to the center panel
        // and add action listeners
        buttons[10] = new JButton(buttonNames[10]);
        pCenter.add(buttons[10]);
        buttons[10].addActionListener(new DecimalListener());

        buttons[11] = new JButton(buttonNames[11]);
        pCenter.add(buttons[11]);
        buttons[11].addActionListener(new CancelListener());

        // Add the center panel to the frame
        add(pCenter, BorderLayout.CENTER);

        JPanel pEast = new JPanel();
        pEast.setLayout(new GridLayout(4, 1, 10, 10));

        pEast.add(plus);
        pEast.add(minus);
        pEast.add(multiply);
        pEast.add(divide);

        // register operator listeners
        plus.addActionListener(new OperatorListener());
        minus.addActionListener(new OperatorListener());
        multiply.addActionListener(new OperatorListener());
        divide.addActionListener(new OperatorListener());

        // Add the east panel to the frame
        add(pEast, BorderLayout.EAST);
    }

    // Add the event listener for digits 0 - 9
    class DigitListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            // add the number the user pushed to topText
            topNumber += ((AbstractButton) e.getSource()).getText();
            topText.setText(topNumber);
            newNumberEntered = true;
        }
    }

    // Event listener for operators - +, -, *, /
    class OperatorListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            // Set the currentValue to whatever is in the topText unless there
            // is a pending operation
            if (!addS && !subtractS && !divideS && !multiplyS) {
                calc.setCurrentValue(Double.parseDouble(topText.getText()));
                topNumber = "";
                decimalS = false;
                newNumberEntered = false;
            } else {  

             
                if (newNumberEntered == true)
                {
                    // do ever calculation the user wanted
                    equals.doClick();
                    newNumberEntered = false;
                }
            }


            if (e.getSource() == plus)
            {
                addS = true;
                subtractS = false; divideS = false; multiplyS = false;
            }
            else if (e.getSource() == minus)
            {
                subtractS = true;
                addS = false; divideS = false; multiplyS = false;
            }
            else if (e.getSource() == divide)
            {
                divideS = true;
                addS = false; subtractS = false; multiplyS = false;
            }
            else if (e.getSource() == multiply)
            {
                multiplyS = true;
                addS = false; subtractS = false; divideS = false;
            }
        }
    }

    // Event listener for =
    class EqualsListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            double answer;   // holds the result of the calculation

            calc.setOp2Value(Double.parseDouble(topText.getText()));

            if (addS)
                calc.add(calc.getOp2Value());
            else if (subtractS)
                calc.subtract(calc.getOp2Value());
            else if (multiplyS)
                calc.multiply(calc.getOp2Value());
            else if (divideS)
                calc.divide(calc.getOp2Value());

            // update topText
            topText.setText(String.valueOf(calc.getCurrentValue()));

            // reset sentinal values
            decimalS = false;
            addS = false;
            subtractS = false;
            multiplyS = false;
            divideS = false;

            // reset the topNumber
            topNumber = "";
        }
    }

    // Event listener for .
    class DecimalListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            // don't let the user enter more than one decimal
            if (!decimalS) {
                topNumber += ".";
                topText.setText(topNumber);
                decimalS = true;
            }
        }
    }

    // Event listener for C
    class CancelListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            // set all operator sentinal values to false
            addS = false;
            subtractS = false;
            multiplyS = false;
            divideS = false;
            decimalS = false;

            // reset number
            calc.setCurrentValue(0);
            topNumber = "";
            topText.setText(topNumber);
        }
    }

    /* main method to drive the calculator */
    public static void main(String[] args) {

        // Create a new frame
        JFrame CalcGUI = new CalcGUI();

        // set Title to Calculator
        CalcGUI.setTitle("Calculator");

        // set size of Calculator and prevent it from being resized
        CalcGUI.setSize(400, 250);
        CalcGUI.setResizable(false);


        // Center frame
        CalcGUI.setLocationRelativeTo(null);

        // when the window is closed the program ends
        CalcGUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // display the frame
        CalcGUI.setVisible(true);

    }
}
--------------------------------------------------------------------------------------------------------------
import java.util.InputMismatchException;
import java.util.Scanner;


public class MemoryCalc {

    private double currentValue;   // the Current value (first operator)
    private double op2;               // the value of the second operator

    // Operations functions for +, -, *, /   *

    public void add(double op2) {
        currentValue += op2;
    }

    public void subtract(double op2) {
        currentValue -= op2;
    }

    public void multiply(double op2) {
        currentValue *= op2;
    }

    public void divide(double op2) {
        if (op2 == 0) {
            currentValue = Double.NaN;
        } else {
            currentValue /= op2;
        }
    }

    // Getters and Setters for currentValue and op2   *

    public double getCurrentValue() {
        return currentValue;
    }

    public double getOp2Value() {
        return op2;
    }

    public void setCurrentValue(double currentValue) {
        this.currentValue = currentValue;
    }

    public void setOp2Value(double op2) {
        this.op2 = op2;
    }
}

Explanation / Answer

here is your modified Code : ------------>>>>>>>>>

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
// the CalcGUI class defines a GUI for a calculator   *
public class CalcGUI extends JFrame {
    // create sentinal values that are triggered when an operation is being performed
    boolean addS = false;
    boolean subtractS = false;
    boolean divideS = false;
    boolean multiplyS = false;
    boolean decimalS = false;
    boolean newNumberEntered = false;   // true if the last event was a digit being entered
    // Create a new MemoryCalc Object
    MemoryCalc calc = new MemoryCalc();
    // Create an = button to the bottom of the GUI
    private JButton equals = new JButton("=");
    // Create a text field for the top of the GUI
    private JTextField topText = new JTextField("0.0");
    // create an array of buttons for the center panel
    private JButton[] buttons = new JButton[12];
    // create an array of text for the center button panel
    private String[] buttonNames = { "1", "2", "3",
            "4", "5", "6",
            "7", "8", "9",
            "0", ".", "C",
    };
    // create buttons for the operators and add them to the east panel
    private JButton plus = new JButton("+");
    private JButton minus = new JButton("-");
    private JButton multiply = new JButton("*");
    private JButton divide = new JButton("/");
    private String topNumber = "";   // The string that is displayed on the calculator
    public CalcGUI() {
        // Set layout with 10 px horizontal gap and 10 px vertical gap
        setLayout(new BorderLayout(10, 10));
        // define White (for topText)
        Color white = new Color(255, 255, 255);
        // set the top text field so that it cannot be changed by the user
        topText.setEditable(false);
        // Change topText color to white
        topText.setBackground(white);
        // change the top text field font to a bold 20pt mono font
        Font topTextFont = new Font("monospace", Font.BOLD, 20);
        topText.setFont(topTextFont);
        // add the top text field to the top of the GUI
        add(topText, BorderLayout.NORTH);

        // add equals to the bottom of the calculator
        add(equals, BorderLayout.SOUTH);
        // register equals listener
        equals.addActionListener(new EqualsListener());
        // Create a 3X3 panel for the center of the GUI
        // with 10px horizontal gap and 5px vertical gap
        JPanel pCenter = new JPanel();
        pCenter.setLayout(new GridLayout(4, 3, 10, 10));
        // create the numerical buttons and add them to the center panel
        // and add action listeners
        for (int i = 0; i < 10; i++)
        {
            buttons[i] = new JButton(buttonNames[i]);
   buttons[i].setEnabled(false);
            pCenter.add(buttons[i]);
            buttons[i].addActionListener(new DigitListener());
        }
        // Create . and C buttons and add them to the center panel
        // and add action listeners
        buttons[10] = new JButton(buttonNames[10]);
        pCenter.add(buttons[10]);
        buttons[10].addActionListener(new DecimalListener());
        buttons[11] = new JButton(buttonNames[11]);
        pCenter.add(buttons[11]);
        buttons[11].addActionListener(new CancelListener());
        // Add the center panel to the frame
        add(pCenter, BorderLayout.CENTER);
        JPanel pEast = new JPanel();
        pEast.setLayout(new GridLayout(4, 1, 10, 10));
        pEast.add(plus);
        pEast.add(minus);
        pEast.add(multiply);
        pEast.add(divide);
        // register operator listeners
        plus.addActionListener(new OperatorListener());
        minus.addActionListener(new OperatorListener());
        multiply.addActionListener(new OperatorListener());
        divide.addActionListener(new OperatorListener());
        // Add the east panel to the frame
        add(pEast, BorderLayout.EAST);
    }
    // Add the event listener for digits 0 - 9
    class DigitListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            // add the number the user pushed to topText
            topNumber += ((AbstractButton) e.getSource()).getText();
            topText.setText(topNumber);
            newNumberEntered = true;
        }
    }
    // Event listener for operators - +, -, *, /
    class OperatorListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            // Set the currentValue to whatever is in the topText unless there
            // is a pending operation
            if (!addS && !subtractS && !divideS && !multiplyS) {
                calc.setCurrentValue(Double.parseDouble(topText.getText()));
                topNumber = "";
                decimalS = false;
                newNumberEntered = false;
            } else {  
             
                if (newNumberEntered == true)
                {
                    // do ever calculation the user wanted
                    equals.doClick();
                    newNumberEntered = false;
                }
            }
   for(int i = 0;i<10;i++){
    buttons[i].setEnabled(true);
   }
            if (e.getSource() == plus)
            {
                addS = true;
                subtractS = false; divideS = false; multiplyS = false;
            }
            else if (e.getSource() == minus)
            {
                subtractS = true;
                addS = false; divideS = false; multiplyS = false;
            }
            else if (e.getSource() == divide)
            {
                divideS = true;
                addS = false; subtractS = false; multiplyS = false;
            }
            else if (e.getSource() == multiply)
            {
                multiplyS = true;
                addS = false; subtractS = false; divideS = false;
            }
        }
    }
    // Event listener for =
    class EqualsListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            double answer;   // holds the result of the calculation
            calc.setOp2Value(Double.parseDouble(topText.getText()));
            if (addS)
                calc.add(calc.getOp2Value());
            else if (subtractS)
                calc.subtract(calc.getOp2Value());
            else if (multiplyS)
                calc.multiply(calc.getOp2Value());
            else if (divideS)
                calc.divide(calc.getOp2Value());
            // update topText
            topText.setText(String.valueOf(calc.getCurrentValue()));
            // reset sentinal values
            decimalS = false;
            addS = false;
            subtractS = false;
            multiplyS = false;
            divideS = false;
   for(int i = 0;i<10;i++){
    buttons[i].setEnabled(false);
   }
            // reset the topNumber
            topNumber = "";
        }
    }
    // Event listener for .
    class DecimalListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            // don't let the user enter more than one decimal
            if (!decimalS) {
                topNumber += ".";
                topText.setText(topNumber);
                decimalS = true;
            }
        }
    }
    // Event listener for C
    class CancelListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            // set all operator sentinal values to false
            addS = false;
            subtractS = false;
            multiplyS = false;
            divideS = false;
            decimalS = false;
            // reset number
            calc.setCurrentValue(0);
            topNumber = "";
            topText.setText("0.0");
        }
    }
    /* main method to drive the calculator */
    public static void main(String[] args) {
        // Create a new frame
        JFrame CalcGUI = new CalcGUI();
        // set Title to Calculator
        CalcGUI.setTitle("Calculator");
        // set size of Calculator and prevent it from being resized
        CalcGUI.setSize(400, 250);
        CalcGUI.setResizable(false);

        // Center frame
        CalcGUI.setLocationRelativeTo(null);
        // when the window is closed the program ends
        CalcGUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // display the frame
        CalcGUI.setVisible(true);
    }
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote