2014-10-02 97 views
1

我们被告知有10个复选框,用户只允许检查1-3个复选框。用户点击一个表示他/她已完成要求的按钮并在计算机随机选择一个复选框后。其余的复选框将被视为获胜者。顺便说一句,这是一个游戏程序。
我正在使用Swing和AWT。如何限制选中的复选框?

回答

2

您可以限制复选框被选择或不被禁用成分:

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

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

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个复选框? – Sham 2014-10-02 13:13:07

+0

不,这个例子将允许你拥有尽可能多的按钮,但是当盒子被选中/取消选中时,它将控制应该发生的改变(根据我的理解)。 – Tavo 2014-10-03 06:18:01

+0

好吧..生病尝试应用它,谢谢你的帮助 – Sham 2014-10-04 03:13:32

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