2015-05-06 106 views
2

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

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

结束时复位的totalSelection文'没什么happens'你期望发生的?你想'totalSelection'中的值改变吗? – copeg

+0

是的,这正是我想要发生的事情。 – Eleyna

回答

1

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

因此,要解决这个问题,在itemStateChanged

+0

谢谢,这解决了我的问题:) – Eleyna

0

您显示totalSelection的JTextField内totalPrice值,但你永远不更新由JTextField中持有的文本。 Java编译器和JVM非常笨,只会做你告诉它做的事情。如果您希望更新文本,则当您希望更新发生时,您必须在文本字段上明确呼叫setText(...)

+0

谢谢!很有帮助。 – Eleyna

相关问题