Java Applet Checkbox错误

时间:2013-04-10 19:02:07

标签: java applet checkbox

我的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);
}
}     

1 个答案:

答案 0 :(得分:1)

您所询问的行为是半复选框和半单选按钮,有两种解决方法:

  1. 在Checkboxgroup中添加一个额外的复选框,基本上说“没有其他选项”。并在侦听器中设置该Checkbox的状态。因为一旦您在复选框组中选择了一个选项,我就无法清除它。

  2. 删除Checkboxgroup并让您的侦听器管理其他复选框的排除,而不是依赖Checkboxgroup。示例代码为

  3. -

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