2011-04-29 179 views
7

當我創建幾個單選按鈕(new Button(parent, SWT.RADIO))並使用radioButton5.setSelection(true)以編程方式設置選擇時,之前選定的單選按鈕也保持選中狀態。我是否必須遍歷同一組中的所有其他單選按鈕以取消選擇它們,還是有更簡單的選擇?提前致謝。SWT:以編程方式設置單選按鈕

回答

6

不幸的是,你必須迭代所有的選項。當您的用戶界面第一次出現時,會觸發BN_CLICKED事件。如果您ShellGroup或任何單選按鈕的容器不與SWT.NO_RADIO_GROUP選項,則調用下面的方法創建:

void selectRadio() 
{ 
    Control [] children = parent._getChildren(); 
    for (int i=0; i<children.length; i++) { 
     Control child = children [i]; 
     if (this != child) child.setRadioSelection (false); 
    } 
    setSelection (true); 
} 

所以基本上Eclipse本身取決於遍歷所有的單選按鈕和切換它們的狀態。

每次手動選擇一個單選按鈕時,BN_CLICKED事件將被觸發,因此會自動切換。

當您使用button.setSelection(boolean)時,則不會觸發BN_CLICKED事件。因此不會自動切換單選按鈕。

檢查org.eclipse.swt.widgets.Button類以獲取更多詳細信息。

-2

這應該會自動發生。你如何創建按鈕?他們在同一個父母身上嗎?父母是否使用NO_RADIO_GROUP風格?

+0

即使它們位於同一父級,並且父級未使用「NO_RADIO_GROUP」創建,它們仍顯示問題中提到的行爲。該行爲至少在使用eclipse 3.6的Windows Vista上。如果它在其他OS或Eclipse版本上工作,那麼它的** SWT Bug **。 – Favonius 2011-04-30 03:40:17

1

同一複合材料中的單選按鈕將充當一個組。一次只能選擇一個單選按鈕。下面是一個工作示例:

Composite composite = new Composite(parent, SWT.NONE); 

    Button btnCopy = new Button(composite, SWT.RADIO); 
    btnCopy.setText("Copy Element"); 
    btnCopy.setSelection(false); 

    Button btnMove = new Button(composite, SWT.RADIO); 
    btnMove.setText("Move Element");