SWT:以编程方式设置单选按钮

7
当我创建一些单选按钮(new Button(parent, SWT.RADIO))并使用radioButton5.setSelection(true)编程方式设置选择时,先前选定的单选按钮仍然保持选定状态。我是否需要迭代同一组的所有其他单选按钮以取消选择它们,还是有更简单的替代方法?提前致谢。
3个回答

9

很遗憾,您必须遍历所有选项。当您的UI第一次出现时,会触发一个BN_CLICKED事件。如果您的单选按钮的容器不是使用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类。


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");

-2

这应该自动发生。你是如何创建按钮的?它们在同一个父级上吗?父级使用了NO_RADIO_GROUP样式吗?


即使它们位于同一父级并且该父级未使用“NO_RADIO_GROUP”创建,它们仍会表现出问题中提到的行为。该行为至少在Windows Vista上与eclipse 3.6一起出现。如果在其他操作系统或eclipse版本上工作,则是一个SWT Bug - Favonius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接