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