我的java复选框小程序出现问题。我得到它主要工作,但我最终得到了一个小错误。当我选择汤时,沙拉应该是灰色的(并且它是),但是如果我已经从沙拉中选择了一个项目然后点击汤,沙拉变成灰色并且仍然选择项目(沙拉内)。
public class Applet_11 extends Applet implements ItemListener
{
Panel
dinnerPanel,
soupPanel,
saladPanel;
Checkbox
standard, deluxe,
soup, salad,
cream, broth, gumbo,
tossed, caesar,
croutons,lite;
//Used to setup all of the boxes and add them to the Applet
public void init()
{
CheckboxGroup dinnerType = new CheckboxGroup();
standard = new Checkbox("standard", dinnerType, false);
standard.addItemListener(this);
deluxe = new Checkbox("deluxe", dinnerType, true);
deluxe.addItemListener(this);
CheckboxGroup soupOrSalad = new CheckboxGroup();
soup = new Checkbox("Soup", soupOrSalad, false);
soup.addItemListener(this);
salad = new Checkbox("Salad", soupOrSalad, false);
salad.addItemListener(this);
CheckboxGroup soups = new CheckboxGroup();
cream = new Checkbox("cream", soups, false);
cream.addItemListener(this);
broth = new Checkbox("broth", soups, false);
broth.addItemListener(this);
gumbo = new Checkbox("gumbo", soups, false);
gumbo.addItemListener(this);
CheckboxGroup salads = new CheckboxGroup();
tossed = new Checkbox("tossed", salads, false);
tossed.addItemListener(this);
caesar = new Checkbox("ceasar", salads, false);
caesar.addItemListener(this);
croutons = new Checkbox("croutons", salads, false);
croutons.addItemListener(this);
lite = new Checkbox("lite", salads, false);
lite.addItemListener(this);
//adding the componets to the Applet
setLayout(new GridLayout(0, 1));
dinnerPanel = new Panel();
add(dinnerPanel);
dinnerPanel.add(standard);
dinnerPanel.add(deluxe);
soupPanel = new Panel();
add(soupPanel);
soupPanel.add(soup);
soupPanel.add(cream);
soupPanel.add(broth);
soupPanel.add(gumbo);
saladPanel = new Panel();
add(saladPanel);
saladPanel.add(salad);
saladPanel.add(tossed);
saladPanel.add(caesar);
saladPanel.add(croutons);
saladPanel.add(lite);
}
//ItemEvents and calls other functions
public void itemStateChanged(ItemEvent e)
{
if (e.getSource() == standard || e.getSource() == deluxe) {
handleDinnerType((Checkbox)e.getSource());
} else if (e.getSource() == soup || e.getSource() == salad) {
handleSoupSaladChoice((Checkbox)e.getSource());
}
}
//helper function for dinner type
void handleDinnerType(Checkbox selectedType)
{
boolean enabled = false;
if (selectedType == standard) {
enabled = false;
} else if (selectedType == deluxe) {
enabled = true;
}
cream.setEnabled(enabled);
broth.setEnabled(enabled);
gumbo.setEnabled(enabled);
tossed.setEnabled(enabled);
caesar.setEnabled(enabled);
croutons.setEnabled(enabled);
lite.setEnabled(enabled);
}
//helper function for salad and soup type
void handleSoupSaladChoice(Checkbox selectedCourse)
{
boolean soupEnabled, saladEnabled;
if (selectedCourse == soup) {
soupEnabled = true;
saladEnabled = false;
} else {
soupEnabled = false;
saladEnabled = true;
}
cream.setEnabled(soupEnabled);
broth.setEnabled(soupEnabled);
gumbo.setEnabled(soupEnabled);
tossed.setEnabled(saladEnabled);
caesar.setEnabled(saladEnabled);
croutons.setEnabled(saladEnabled);
lite.setEnabled(saladEnabled);
}
}
答案 0 :(得分:1)
您所询问的行为是半复选框和半单选按钮,有两种解决方法:
在Checkboxgroup中添加一个额外的复选框,基本上说“没有其他选项”。并在侦听器中设置该Checkbox的状态。因为一旦您在复选框组中选择了一个选项,我就无法清除它。
删除Checkboxgroup并让您的侦听器管理其他复选框的排除,而不是依赖Checkboxgroup。示例代码为
-
public class Applet_15934232 extends Applet implements ItemListener {
Panel
dinnerPanel,
soupPanel,
saladPanel;
Checkbox
standard, deluxe,
soup, salad,
cream, broth, gumbo,
tossed, caesar,
croutons, lite;
//Used to setup all of the boxes and add them to the Applet
public void init() {
CheckboxGroup dinnerType = new CheckboxGroup();
standard = new Checkbox("standard", dinnerType, false);
standard.addItemListener(this);
deluxe = new Checkbox("deluxe", dinnerType, true);
deluxe.addItemListener(this);
CheckboxGroup soupOrSalad = new CheckboxGroup();
soup = new Checkbox("Soup", soupOrSalad, false);
soup.addItemListener(this);
salad = new Checkbox("Salad", soupOrSalad, false);
salad.addItemListener(this);
cream = new Checkbox("cream", false);
cream.addItemListener(this);
broth = new Checkbox("broth", false);
broth.addItemListener(this);
gumbo = new Checkbox("gumbo", false);
gumbo.addItemListener(this);
tossed = new Checkbox("tossed", false);
tossed.addItemListener(this);
caesar = new Checkbox("ceasar", false);
caesar.addItemListener(this);
croutons = new Checkbox("croutons", false);
croutons.addItemListener(this);
lite = new Checkbox("lite", false);
lite.addItemListener(this);
//adding the componets to the Applet
setLayout(new GridLayout(0, 1));
dinnerPanel = new Panel();
add(dinnerPanel);
dinnerPanel.add(standard);
dinnerPanel.add(deluxe);
soupPanel = new Panel();
add(soupPanel);
soupPanel.add(soup);
soupPanel.add(cream);
soupPanel.add(broth);
soupPanel.add(gumbo);
saladPanel = new Panel();
add(saladPanel);
saladPanel.add(salad);
saladPanel.add(tossed);
saladPanel.add(caesar);
saladPanel.add(croutons);
saladPanel.add(lite);
}
//ItemEvents and calls other functions
public void itemStateChanged(ItemEvent e) {
if (e.getSource() == standard || e.getSource() == deluxe) {
handleDinnerType((Checkbox) e.getSource());
} else if (e.getSource() == soup || e.getSource() == salad) {
handleSoupSaladChoice((Checkbox) e.getSource());
} else {
handleButtonSelection((Checkbox) e.getSource());
}
}
private void handleButtonSelection(Checkbox source) {
cream.setState(source == cream);
broth.setState(source == broth);
gumbo.setState(source == gumbo);
tossed.setState(source == tossed);
caesar.setState(source == caesar);
croutons.setState(source == croutons);
lite.setState(source == lite);
}
//helper function for dinner type
void handleDinnerType(Checkbox selectedType) {
boolean enabled = false;
if (selectedType == standard) {
enabled = false;
} else if (selectedType == deluxe) {
enabled = true;
}
cream.setEnabled(enabled);
broth.setEnabled(enabled);
gumbo.setEnabled(enabled);
tossed.setEnabled(enabled);
caesar.setEnabled(enabled);
croutons.setEnabled(enabled);
lite.setEnabled(enabled);
}
//helper function for salad and soup type
void handleSoupSaladChoice(Checkbox selectedCourse) {
boolean soupEnabled = (selectedCourse == soup);
boolean saladEnabled = (selectedCourse == salad);
if (soupEnabled) {
tossed.setState(false);
caesar.setState(false);
croutons.setState(false);
lite.setState(false);
}
if (saladEnabled) {
cream.setState(false);
broth.setState(false);
gumbo.setState(false);
}
cream.setEnabled(soupEnabled);
broth.setEnabled(soupEnabled);
gumbo.setEnabled(soupEnabled);
tossed.setEnabled(saladEnabled);
caesar.setEnabled(saladEnabled);
croutons.setEnabled(saladEnabled);
lite.setEnabled(saladEnabled);
}
}