JRadioButtons 和 JCheckBox
JRadioButtons and JCheckBox
我有一个具体的问题,目前我一直在努力解决。我正在开发一个特定的应用程序,用户可以在其中通过 JCheckBoxes 选择保险选项。
我使用 ButtonGroup 允许用户 select 两种保险类型中的一种——HMO(健康维护组织)或 PPO(首选提供者组织)。我使用常规(单个)JCheckBoxes 进行牙科保险和视力保险选择;用户可以 select 一个选项,两个选项,或者都不选。作为用户 select 的每个选项,其名称和价格显示在文本字段中; HMO 每月收费 200 美元,PPO 每月收费 600 美元,牙科保险每月增加 75 美元,视力保健每月增加 20 美元。当用户 deselect 一个项目时,文本字段变为空白。请看我下面写的代码。
public class JInsurance extends JFrame implements ItemListener{
private JTextField t1;
private JRadioButton hmo, ppo;
private JCheckBox dental, visual;
private JLabel lbl;
private ButtonGroup grp;
public double total;
public JInsurance(){
setBounds(100, 100, 450, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(null);
grp = new ButtonGroup();
hmo = new JRadioButton("HMO");
hmo.setBounds(21, 53, 109, 23);
hmo.setActionCommand("hmo");
grp.add(hmo);
add(hmo);
ppo = new JRadioButton("PPO");
ppo.setBounds(21, 101, 109, 23);
ppo.setActionCommand("ppo");
grp.add(ppo);
add(ppo);
dental = new JCheckBox("Dental Insurance");
dental.setBounds(178, 53, 135, 23);
add(dental);
visual = new JCheckBox("Visual Insurance");
visual.setBounds(178, 101, 118, 23);
add(visual);
lbl = new JLabel("You have chosen");
lbl.setFont(new Font("Tahoma", Font.BOLD, 12));
lbl.setBounds(41, 193, 109, 23);
add(lbl);
t1 = new JTextField();
t1.setBounds(152, 181, 179, 45);
add(t1);
t1.setColumns(10);
hmo.addItemListener(this);
ppo.addItemListener(this);
dental.addItemListener(this);
visual.addItemListener(this);
}
public void itemStateChanged(ItemEvent e){
if (hmo.isSelected())
if(dental.isSelected())
total = 200 + 75;
else if(dental.isSelected() && visual.isSelected())
total = 200 + 75 + 20;
else if(visual.isSelected())
total = 200 + 20;
t1.setText(String.valueOf(total));
if(ppo.equals("PPO"))
if(dental.isSelected())
total = 600 + 75;
else if(dental.isSelected() && visual.isSelected())
total = 600 + 75 + 20;
else if(visual.isSelected())
total = 600 + 20;
t1.setText(String.valueOf(total));
}
主要问题是您无法在 itemStateChanged() 方法中正确实现逻辑。以下代码应该可以解决您的问题。
public void itemStateChanged(ItemEvent e){
if (hmo.isSelected()) {
total = 200;
if(dental.isSelected()) {
total += 75;
}
if(visual.isSelected()) {
total += 20;
}
t1.setText(String.valueOf(total));
}
else if(ppo.isSelected()) {
total = 600;
if(dental.isSelected()) {
total += 75;
}
if(visual.isSelected()) {
total += 20;
}
t1.setText(String.valueOf(total));
}
else { // In case you later use grp.clearSelection();
total = 0;
t1.setText("");
}
}
我有一个具体的问题,目前我一直在努力解决。我正在开发一个特定的应用程序,用户可以在其中通过 JCheckBoxes 选择保险选项。
我使用 ButtonGroup 允许用户 select 两种保险类型中的一种——HMO(健康维护组织)或 PPO(首选提供者组织)。我使用常规(单个)JCheckBoxes 进行牙科保险和视力保险选择;用户可以 select 一个选项,两个选项,或者都不选。作为用户 select 的每个选项,其名称和价格显示在文本字段中; HMO 每月收费 200 美元,PPO 每月收费 600 美元,牙科保险每月增加 75 美元,视力保健每月增加 20 美元。当用户 deselect 一个项目时,文本字段变为空白。请看我下面写的代码。
public class JInsurance extends JFrame implements ItemListener{
private JTextField t1;
private JRadioButton hmo, ppo;
private JCheckBox dental, visual;
private JLabel lbl;
private ButtonGroup grp;
public double total;
public JInsurance(){
setBounds(100, 100, 450, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(null);
grp = new ButtonGroup();
hmo = new JRadioButton("HMO");
hmo.setBounds(21, 53, 109, 23);
hmo.setActionCommand("hmo");
grp.add(hmo);
add(hmo);
ppo = new JRadioButton("PPO");
ppo.setBounds(21, 101, 109, 23);
ppo.setActionCommand("ppo");
grp.add(ppo);
add(ppo);
dental = new JCheckBox("Dental Insurance");
dental.setBounds(178, 53, 135, 23);
add(dental);
visual = new JCheckBox("Visual Insurance");
visual.setBounds(178, 101, 118, 23);
add(visual);
lbl = new JLabel("You have chosen");
lbl.setFont(new Font("Tahoma", Font.BOLD, 12));
lbl.setBounds(41, 193, 109, 23);
add(lbl);
t1 = new JTextField();
t1.setBounds(152, 181, 179, 45);
add(t1);
t1.setColumns(10);
hmo.addItemListener(this);
ppo.addItemListener(this);
dental.addItemListener(this);
visual.addItemListener(this);
}
public void itemStateChanged(ItemEvent e){
if (hmo.isSelected())
if(dental.isSelected())
total = 200 + 75;
else if(dental.isSelected() && visual.isSelected())
total = 200 + 75 + 20;
else if(visual.isSelected())
total = 200 + 20;
t1.setText(String.valueOf(total));
if(ppo.equals("PPO"))
if(dental.isSelected())
total = 600 + 75;
else if(dental.isSelected() && visual.isSelected())
total = 600 + 75 + 20;
else if(visual.isSelected())
total = 600 + 20;
t1.setText(String.valueOf(total));
}
主要问题是您无法在 itemStateChanged() 方法中正确实现逻辑。以下代码应该可以解决您的问题。
public void itemStateChanged(ItemEvent e){
if (hmo.isSelected()) {
total = 200;
if(dental.isSelected()) {
total += 75;
}
if(visual.isSelected()) {
total += 20;
}
t1.setText(String.valueOf(total));
}
else if(ppo.isSelected()) {
total = 600;
if(dental.isSelected()) {
total += 75;
}
if(visual.isSelected()) {
total += 20;
}
t1.setText(String.valueOf(total));
}
else { // In case you later use grp.clearSelection();
total = 0;
t1.setText("");
}
}