2011-04-29 183 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");