2017-10-06 49 views
0

我想要一個按鈕組,其中只有一個選項被選中,或者它們都不是。目前,我可以讓它在默認情況下沒有勾選選項,然後如果勾選其中一個選項,則只能勾選其中一個選項,但我也希望能夠取消選中的按鈕。這可能嗎?在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

將按鈕添加到標爲「無其他選項」的組中。 –

回答

2

只需使用的ButtonGroupclearSelection()方法:

ButtonGroup.clearSelection()

清除選擇,使得沒有ButtonGroup中 的按鈕被選中。

+0

如何提供「一個」或「無」scenerio? – matt

+0

在我看來,它回答了「我也希望能夠取消選中的按鈕」部分,另一部分已經在工作。 – Berger

+0

這聽起來像他們有一個GUI,用戶需要能夠取消框。所以,我猜想,這爲程序員提供了一種解決方法,但不是最終用戶。 – matt

1

此片段演示瞭如何使用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

0

讓我們假裝你有一個按鈕組,它們是單選按鈕。

ButtonGroup buttonGroup; 

,並已itialized並添加到它的按鈕等

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

這樣,如果你點擊一個選擇的按鈕就會變成未選中。

相關問題