选择 JCheckBox 时添加到变量
Add to a variable when a JCheckBox is selected
我需要编写一个允许用户在 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);
}
}
您在 totalSelection JTextfield 中显示了 totalPrice 值,但您从未更新 JTextField 保存的文本。 Java 编译器和 JVM 非常愚蠢,只会按照您的指示去做。如果您希望更新文本,则必须在更新发生时在文本字段上显式调用 setText(...)
。
您需要自己更新 totalSelection
的文本。这是因为当你初始化它时,你提供了一个 String 对象,该对象是当时从 totalPrice
的值生成的。
因此要修复它,请在 itemStateChanged
末尾重置 totalSelection
的文本
我需要编写一个允许用户在 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);
}
}
您在 totalSelection JTextfield 中显示了 totalPrice 值,但您从未更新 JTextField 保存的文本。 Java 编译器和 JVM 非常愚蠢,只会按照您的指示去做。如果您希望更新文本,则必须在更新发生时在文本字段上显式调用 setText(...)
。
您需要自己更新 totalSelection
的文本。这是因为当你初始化它时,你提供了一个 String 对象,该对象是当时从 totalPrice
的值生成的。
因此要修复它,请在 itemStateChanged
totalSelection
的文本