我创建了一个使用单选按钮,按钮和复选框的基本程序。我的问题是,在运行时,可以选中但不取消选中复选框。我很确定它的简单但我已经尝试了来自oracle网站的代码片段,但似乎没有用。我能指出正确的方向吗?谢谢。
这是一个处理复选框事件的内部类。它假设接收事件并将变量设置为适当的价格。我试过else
,但这似乎不起作用。
private void buildPanel()
{
//Create the label, radio buttons, check boxes, and buttons
messageLabel = new JLabel("Select the package of your choice: ");
min1 = new JRadioButton("300 Minutes - $45.00 per month.");
min2 = new JRadioButton("800 Minutes - $65.00 per month.");
min3 = new JRadioButton("1500 Minutes - $99.00 per month.");
model1 = new JRadioButton("Model 100 - $29.95");
model2 = new JRadioButton("Model 110 - $49.95 ");
model3 = new JRadioButton("Model 200 - $99.95");
vMail = new JCheckBox("Voice Mail - $5.00 per month.");
vMail.setSelected(false);
textMes = new JCheckBox("Text Messaging - $10.00 per month.");
textMes.setSelected(false);
okButton = new Button("OK");
//Group the radio buttons
radiogroupmin = new ButtonGroup();
radiogroupmin.add(min1);
radiogroupmin.add(min2);
radiogroupmin.add(min3);
radiogroupmodel = new ButtonGroup();
radiogroupmodel.add(model1);
radiogroupmodel.add(model2);
radiogroupmodel.add(model3);
//Group the check boxes
checkboxgroup = new ButtonGroup();
checkboxgroup.add(vMail);
checkboxgroup.add(textMes);
//Add action listener to the radio buttons
min1.addActionListener(new RadioButtonListener());
min2.addActionListener(new RadioButtonListener());
min3.addActionListener(new RadioButtonListener());
model1.addActionListener(new RadioButtonListener());
model2.addActionListener(new RadioButtonListener());
model3.addActionListener(new RadioButtonListener());
//Add action listener to the check boxes
vMail.addItemListener(new CheckBoxListener());
textMes.addItemListener(new CheckBoxListener());
//Add action listener to the button
okButton.addActionListener(new ButtonListener());
//create a panel and add the components to it
panel = new JPanel(new BorderLayout());
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
panel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
panel.add(messageLabel);
panel.add(min1);
panel.add(min2);
panel.add(min3);
panel.add(model1);
panel.add(model2);
panel.add(model3);
panel.add(vMail);
panel.add(textMes);
panel.add(okButton);
}
public static class RadioButtonListener implements ActionListener
{
public static double minPrice;
public static String model;
public static double modelPrice = 0.0;
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == min1)
{
minPrice = 45.00;
}
else if(e.getSource() == min2)
{
minPrice = 65.00;
}
else if(e.getSource() == min3)
{
minPrice = 99.00;
}
if(e.getSource() == model1)
{
model = "Model 100";
modelPrice = 29.00;
}
else if(e.getSource() == model2)
{
model = "Model 110";
modelPrice = 49.99;
}
else if(e.getSource() == model3)
{
model = "Model 200";
modelPrice = 99.99;
}
}
public static double getMinPrice()
{
return minPrice;
}
public static String getModel()
{
return model;
}
public static double getModelPrice()
{
return modelPrice;
}
}
public static class CheckBoxListener implements ItemListener
{
static double voicePrice;
static double textPrice;
public void itemStateChanged(ItemEvent e)
{
if(e.getSource() == vMail)
{
if (e.getStateChange() == ItemEvent.SELECTED)
{
voicePrice = 5.00;
}
else
{
voicePrice = 0.0;
}
}
if(e.getSource() == textMes)
{
if(e.getStateChange() == ItemEvent.SELECTED)
{
textPrice = 10.00;
}
else
{
textPrice = 0.0;
}
}
}
public static double getVoicePrice()
{
return voicePrice;
}
public static double getTextPrice()
{
return textPrice;
}
}
private class ButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == okButton)
{
DecimalFormat df = new DecimalFormat("$00.##");
double total;
final double tax = 0.6;
final double modelTax = (RadioButtonListener.getModelPrice() * tax) + RadioButtonListener.getModelPrice();
total = RadioButtonListener.getMinPrice() +
modelTax + CheckBoxListener.getVoicePrice() + CheckBoxListener.getTextPrice();
JOptionPane.showMessageDialog(null, "Your total is: " + df.format(total));
}
}
}
答案 0 :(得分:1)
或许尝试改变两者:
if(vMail.isSelected())
和
if(textMes.isSelected())
到:
if(e.getStateChange() == ItemEvent.SELECTED)
根据新信息修改以下答案
好的,有一些问题:
checkboxgroup
相关的所有代码。您不想使用复选框中的ButtonGroup
!这是你的主要问题。 ButtonGroup
通常仅用于JRadioButtons
CheckBoxListener
的一个实例,即:
// Add action listener to the check boxes
CheckBoxListener checkBoxListener = new CheckBoxListener();
vMail.addItemListener(checkBoxListener);
textMes.addItemListener(checkBoxListener);