Search code examples
javajframejcheckbox

Add to a variable when a JCheckBox is selected


I need to write an application that allows the user to choose insurance options in JCheckBoxes. Upon selecting a JCheckBox, I want to add the value of that option to the "TotalPrice". I initialized the totalPrice to 0, but when I try to add to it in the "if" statements, nothing happens.

package p3s4;

import java.text.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class JInsurance extends JFrame implements ItemListener {
    //initialize variables.
    FlowLayout flow = new FlowLayout();
    int hmoPrice = 200;
    int ppoPrice = 600;
    int dentalPrice = 75;
    int visionPrice = 20;
    String decimal = ".00";
    DecimalFormat moneyFormat = new DecimalFormat(decimal);
    int totalPrice = 0;
    //initialize TextFields and CheckBoxes.
    JLabel heading = new JLabel("Choose insurance options: ");
    JCheckBox hmo = new JCheckBox("HMO");
    JCheckBox ppo = new JCheckBox("PPO");
    ButtonGroup providersGroup = new ButtonGroup();
    JCheckBox dental = new JCheckBox("Dental");
    JCheckBox vision = new JCheckBox("Vision");
    JTextField hmoSelection = new JTextField(hmo.getText() + " $" + moneyFormat.format(hmoPrice));
    JTextField ppoSelection = new JTextField(ppo.getText() + " $" + moneyFormat.format(ppoPrice));
    JTextField dentalSelection = new JTextField(dental.getText() + " $" + moneyFormat.format(dentalPrice));
    JTextField visionSelection = new JTextField(vision.getText() + " $" + moneyFormat.format(visionPrice));
    JTextField totalSelection = new JTextField("Total:  $" + totalPrice);

    public JInsurance() {
        super("Insurance Options");

        setLayout(flow);
        add(heading);
        providersGroup.add(hmo);
        providersGroup.add(ppo);
        add(hmo);
        add(ppo);
        add(dental);
        add(vision);
        add(totalSelection);
        add(hmoSelection);
        add(ppoSelection);
        add(dentalSelection);
        add(visionSelection);
        //Set visibility.
        hmoSelection.setVisible(false);
        ppoSelection.setVisible(false);
        dentalSelection.setVisible(false);
        visionSelection.setVisible(false);
        totalSelection.setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //add listeners.
        hmo.addItemListener(this);
        ppo.addItemListener(this);
        dental.addItemListener(this);
        vision.addItemListener(this);
    }

    public void itemStateChanged(ItemEvent event) {
        Object source = event.getSource();
        //Check if boxes are selected. If they are, add price of insurance
        //option to "totalPrice" TextField.
        if (source == hmo) {
            if (event.getStateChange() == ItemEvent.SELECTED) {
                totalPrice += 200;
                hmoSelection.setEditable(false);
                hmoSelection.setVisible(true);
                hmoSelection.getParent().revalidate();

            } else {
                totalPrice -= 200;
                hmoSelection.setVisible(false);
            }
        } else if (source == ppo) {
            if (event.getStateChange() == ItemEvent.SELECTED) {
                totalPrice += 600;
                ppoSelection.setEditable(false);
                ppoSelection.setVisible(true);
                ppoSelection.getParent().revalidate();
            } else {
                totalPrice -= 600;
                ppoSelection.setVisible(false);
            }
        } else if (source == dental) {
            if (event.getStateChange() == ItemEvent.SELECTED) {
                totalPrice += 75;
                dentalSelection.setEditable(false);
                dentalSelection.setVisible(true);
                dentalSelection.getParent().revalidate();
            } else {
                totalPrice -= 75;
                dentalSelection.setVisible(false);
            }
        } else {
            if (event.getStateChange() == ItemEvent.SELECTED) {
                totalPrice += 20;
                visionSelection.setEditable(false);
                visionSelection.setVisible(true);
                visionSelection.getParent().revalidate();
            } else {
                totalPrice -= 20;
                visionSelection.setVisible(false);
            }
        }
    }

    public static void main(String[] args) {
        JInsurance first = new JInsurance();
        final int WIDTH = 500;
        final int HEIGHT = 300;
        first.setSize(WIDTH, HEIGHT);
        first.setVisible(true);
        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
        first.setLocation(dim.width / 2 - first.getSize().width / 2,
                dim.height / 2 - first.getSize().height / 2);
    }
}

Solution

  • You need to update the text of totalSelection yourself. This is because when you initialise it, you provide a String object which has been generated from the value of totalPrice at that time.

    So to fix it, reset the text of totalSelection at the end of itemStateChanged