选择JCheckBox时添加到变量

时间:2015-05-06 22:29:12

标签: java jframe jcheckbox

我需要编写一个允许用户在JCheckBoxes中选择保险选项的应用程序。选择JCheckBox后,我想将该选项的值添加到“TotalPrice”中。我将totalPrice初始化为0,但是当我尝试在“if”语句中添加它时,没有任何反应。

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);
    }
}

2 个答案:

答案 0 :(得分:1)

您需要自己更新totalSelection的文字。这是因为在初始化它时,您提供了一个String对象,该对象是当时从totalPrice的值生成的。

要解决此问题,请在totalSelection

结束时重置itemStateChanged的文字

答案 1 :(得分:0)

您在totalSelection JTextfield中显示totalPrice值,但您永远不会更新JTextField持有的文本。 Java编译器和JVM非常愚蠢,只会按照您的要求执行操作。如果您希望更新文本,则必须在要进行更新时在文本字段上显式调用setText(...)