我们如何操纵被选中的Jcheckbox的数量?

时间:2017-03-27 09:08:09

标签: java swing events jcheckbox

我有一个使用JCheckbox的小程序。我必须确保用户最多选择5个中的3个。是否有使用计数器的正确方法?

JCheckBoxes填充在for循环中。其中只声明了一个JCheckbox,但为它们分配了不同的值,并将其添加到同一for循环内的JFrame中。

由于从数据库中检索数据,因此使用了循环。

2 个答案:

答案 0 :(得分:3)

假设您的jcheckbox位于JPanel

您可以使用此功能获取所选JCheckBox

的数量
public int getSelectedNumber(JPanel panel) {
    int numberOfSelected = 0;
    for (Component c : panel.getComponents()) {
        if (c instanceof JCheckBox) {
            numberOfSelected += ((JCheckBox) c).isSelected() ? 1 : 0;
        }
    }
    return numberOfSelected;
}

答案 1 :(得分:1)

  

我必须确保用户最多选择3个中的3个。是否有使用计数器的正确方法?

您不想使用计数器。这只是告诉你选择了多少,并且不会阻止你选择太多。

在允许选中复选框之前,您应该检查已经选择了多少个。

例如:

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();
            }
        });
    }
}
相关问题