如何限制选中的复选框?

时间:2014-10-02 07:41:28

标签: java swing checkbox awt limit

我们被告知有10个复选框,用户只能查看1-3个复选框。用户单击指示他/她已完成要求的按钮后,计算机随机选择一个复选框。剩下的复选框将被宣布为获胜者。顺便说一下,这是一个游戏程序 我正在使用Swing和AWT。

3 个答案:

答案 0 :(得分:2)

您可以通过禁用该组件来限制复选框是否可选:

JCheckBox checkBox = new JCheckBox("Try to click on me");
checkBox.setEnabled(false);

如果未启用(禁用)复选框,则用户无法选择它。

答案 1 :(得分:1)

通过跟踪当前选中的每个复选框,阻止用户选择其他复选框:

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;

public class CheckBoxGroup
{
    private Set<GroupButtonModel> models = new HashSet<GroupButtonModel>();
    private int groupSize;

    public CheckBoxGroup(int groupSize)
    {
        this.groupSize = groupSize;
    }

    public void register(JCheckBox checkBox)
    {
        ButtonModel groupModel = new GroupButtonModel();
        groupModel.setSelected ( checkBox.getModel().isSelected() );
        checkBox.setModel( groupModel );
    }


    private class GroupButtonModel extends JToggleButton.ToggleButtonModel
    {
        @Override
        public void setSelected(boolean selected)
        {
            if (!selected)
            {
                models.remove( this );
                super.setSelected( selected );
                return;
            }

            //  Check number of currently selected check boxes

            if (models.size() == groupSize)
            {
                System.out.println("Only " + groupSize + " items can be selected");
            }
            else
            {
                models.add( this );
                super.setSelected( selected );
            }

        }
    }

    private static void createAndShowGUI()
    {
        JPanel panel = new JPanel();
        CheckBoxGroup group = new CheckBoxGroup(3);

        for (int i = 0; i < 10; i++)
        {
            JCheckBox checkBox = new JCheckBox( String.valueOf(i) );
            panel.add( checkBox );
            group.register( checkBox );
        }

        JFrame frame = new JFrame("Check Box Group");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( panel );
        frame.setLocationByPlatform( true );
        frame.pack();
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
    }
}

答案 2 :(得分:0)

如果我理解得很好,您希望限制用户在轮到他时可以点击的复选框的数量。你可以有一个计数器,告诉你到目前为止用户点击的复选框的数量。当计数器达到1时,按钮将激活,用户可以单击它。当计数器达到3时,所有其他复选框将停用。如果用户想要更改他选择的复选框,则必须取消选中已经检查过的复选框。

代码将是这样的:

onCheckboxSelected()
{
    if(numberOfCheckedButtons == 1)
    {
        activateButton();
    }
    else if(numberOfCheckedButtons == 3):
    {
        deactivateAllCheckBoxes();
    }
}

onCheckboxUnselected()
{
    if(numberOfCheckedButtons == 0)
    {        
        deactivateButton();   
    }
    else if (numberOfCheckedButtons == 2) //This is the case when the user passes from 3 selected checkboxes to 2
    {
        activateAllCheckboxes();
    }
}