在Java中有一个可以取消选择所有按钮的按钮组?

问题描述:

我想要一个按钮组,其中只有一个选项被选中,或者它们都不是。目前,我可以让它在默认情况下没有勾选选项,然后如果勾选其中一个选项,则只能勾选其中一个选项,但我也希望能够取消选中的按钮。这可能吗?在Java中有一个可以取消选择所有按钮的按钮组?

编辑:理想情况下,没有一个清晰的所有按钮,因为它会破坏我的GUI的对称性。另外,这里是我的代码至今:

ButtonGroup option = new ButtonGroup(); 
    for(int i = 0; i < n; i++) { 
      JCheckBox check = new JCheckBox("", false); 
      option.add(check); 
      row3b.add(check); 
     } 
+1

一切皆有可能,但请您分享所做的事情的代码? –

+2

我猜你正在使用单选按钮。你有没有考虑过只是增加一个选项'无'。例如。一个按钮将始终被选中,但是他们可以选择不说以上内容。 – matt

+2

将按钮添加到标为“无其他选项”的组中。 –

只需使用的ButtonGroupclearSelection()方法:

ButtonGroup.clearSelection()

清除选择,使得没有ButtonGroup中 的按钮被选中。

+0

如何提供“一个”或“无”scenerio? – matt

+0

在我看来,它回答了“我也希望能够取消选中的按钮”部分,另一部分已经在工作。 – Berger

+0

这听起来像他们有一个GUI,用户需要能够取消框。所以,我猜想,这为程序员提供了一种解决方法,但不是最终用户。 – matt

此片段演示了如何使用ButtonGroup.clearSelection()明确的选择:

//The buttons 
    JFrame frame = new JFrame("Button test"); 
    JPanel panel = new JPanel(); 
    JRadioButton btn1 = new JRadioButton("Button1"); 
    JRadioButton btn2 = new JRadioButton("Button2"); 
    JButton clearbutton = new JButton("Clear"); 

    panel.add(btn1); 
    panel.add(btn2); 
    panel.add(clearbutton); 
    frame.add(panel); 
    frame.setVisible(true); 
    frame.pack(); 

    //The Group, make sure only one button is selected at a time in the group 
    ButtonGroup btngroup = new ButtonGroup(); 
    btngroup.add(btn1); 
    btngroup.add(btn2); 

    btn1.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 

      // Do whatever you want here 

     } 
    }); 

    btn2.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 

      // Do whatever you want here 

     } 
    }); 

    clearbutton.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 

      // Clear all selections 
      btngroup.clearSelection(); 

     } 
    }); 

正如你所看到的,这就造成了两个JradioButton将并将它们添加到组,然后让一个按钮,清除选择。真的很简单。或者你可以创建你自己的单选按钮类,允许取消选中按钮,这也相对容易实现。

+0

谢谢,这很有用,我可能会实现,但我不想添加一个清除按钮,因为它会破坏我的GUI的对称性。 – JenniferHL3

+0

@ JenniferHL3,'我可能会实现这一点,但我不想添加一个清晰的按钮 - 然后不。只需将您的代码添加到ActionListener。如果该按钮已被选中,则尝试调用clearSelection()方法。 – camickr

让我们假装你有一个按钮组,它们是单选按钮。

ButtonGroup buttonGroup; 

,并已itialized并添加到它的按钮等

Enumeration<AbstractButton> enumeration = buttonGroup.getElements(); 
while(enumeration.hasMoreElements()){ 
    AbstractButton button = enumeration.next(); 
    button.addActionListener(evt->{ 
     if(button.isSelected()){ 
      buttonGroup.clearSelection(); 
     } 
    }); 
} 

这样,如果你点击一个选择的按钮就会变成未选中。