2011-04-29 25 views
7

Cuando creo un par de botones de opción (new Button(parent, SWT.RADIO)) y configuro la selección mediante programación utilizando radioButton5.setSelection(true), el botón de opción seleccionado anteriormente también permanece seleccionado. ¿Debo iterar sobre todos los otros botones de opción del mismo grupo para deseleccionarlos o hay una alternativa más simple? Gracias por adelantado.SWT: configure los botones de radio mediante programación

Respuesta

6

Lamentablemente, debe iterar sobre todas las opciones. Por primera vez cuando aparece su UI, se desencadena un evento BN_CLICKED. Si su Shell o Group o lo que sea contenedor de botones de radio no se crea con SWT.NO_RADIO_GROUP opción, entonces el siguiente método se llama:

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

Así que, esencialmente eclipsar su vez depende de la iteración en todos los botones de radio y alternar su estado.

Cada vez que selecciona manualmente un botón de radio, el evento BN_CLICKED se activa y, por lo tanto, se alterna automáticamente.

Cuando se utiliza button.setSelection(boolean) entonces no BN_CLICKED El evento se activa. Por lo tanto, no hay alternar automáticamente los botones de opción.

Consulte la clase org.eclipse.swt.widgets.Button para obtener más información.

-2

Esto debería suceder automáticamente. ¿Cómo estás creando los botones? ¿Están en el mismo padre? ¿El padre está usando el estilo NO_RADIO_GROUP?

+0

Incluso si están en el mismo elemento primario y el elemento primario no se ha creado con 'NO_RADIO_GROUP', aún muestran el comportamiento mencionado en la pregunta. El comportamiento es al menos en Windows Vista con eclipse 3.6. Si está trabajando en otras versiones de SO o eclipse, entonces es un ** SWT Bug **. – Favonius

1

Los botones de opción dentro del mismo compuesto actuarían como un grupo. Solo se seleccionará un botón de opción a la vez. Aquí hay un ejemplo de trabajo:

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