Как я могу ограничить флажок установлен?

1

Нам сказали, что у меня есть 10 флажков, и пользователю разрешено только установить флажки 1-3. После того, как пользователь нажимает кнопку, указывающую, что он выполнил требования, и после того, как компьютер случайно выбирает флажок. Оставшийся флажок будет рассмотрен в качестве победителя. Кстати, это игровая программа.
Я использую Swing и AWT.

Теги:
swing
awt
checkbox
limit

3 ответа

2

Вы можете ограничить выбор флажка или нет, отключив компонент:

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

Если флажок не включен (отключен), пользователь не может его выбрать.

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();
            }
        });
    }
}
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();
    }
}
  • 0
    в этом коде всего 4 флажка?
  • 0
    Нет, этот пример позволит вам иметь столько же кнопок, сколько у вас есть, но будет контролировать изменения, которые должны произойти (согласно тому, что я понял из вашего сообщения), когда флажки будут отмечены / сняты.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню