error en optionGroup al usar setMultiSelect()

como les va? estoy usando un ejemplo que me pasaron de este gran libro Vaadin 7 UI Design By Example Beginner’s Guide.pdf

by Alejandro Duarte!

y no entiendo como podria escojer 2 opciones cuando selecciono 2 cajas de verificacion, me dicen que haga un cast…que el metodo setMultiSelect(true), este al habilitarse retorna un tipo

Collection

:s

        //este array contiene las opciones del option group
        ArrayList<String> preguntas = new ArrayList<String>();
        preguntas.add("java");
        preguntas.add("c++");//correcto----------
        preguntas.add("c#");
        preguntas.add("php");//correcto -- escojes de estas 2 opciones. 
        
        //option group
        final OptionGroup option = new OptionGroup("Escoje algunos: ",preguntas);
        
        vLayout.addComponents(txt,ll,txtArea,richText,labelRich,option);
        setContent(vLayout); 
        
        option.addValueChangeListener(new ValueChangeListener() {
            
            @Override
            public void valueChange(ValueChangeEvent event) {
    
                    String valor = event.getProperty().getValue().toString();
                    Notification.show("correcto"+valor);
            }
        });
        option.setMultiSelect(true);
        option.setImmediate(true);

Hola Rubén,

Ten en cuenta que:

  • Si el
    OptionGroup

    NO
    está en modo multi-select,
    getValue()
    retorna el valor seleccionado.
  • Si el
    OptionGroup
    está en modo multi-select,
    getValue()
    retorna una colección con los valores seleccionados.

En tu caso
option
es multi-select, por lo que
getValue()
retornará una collección. Esta collección contiene los elementos seleccionados. Podrías hacer algo como lo siguiente (Java 8):

... Set valoresSeleccionados = (Set) event.getProperty().getValue(); String mensaje = String.join(", ", valoresSeleccionados); Notification.show(mensaje); ... Espero esto ayude.

boss, pero una ves que tenga el String
mensaje

cual podria ser la manera correcta o ideal para validar solo 2 checkBox correctos? con .equals() en ese caso? o algo como if("java".equals(Object.getValue() && "c++".equals.(Object.getValue())) { } ?

y otra consulta para saber que setMultiSelected() me retorna un java.util.Set; ,exactamente como se eso? con el debug en eclipse?

saludos y feliz año. gracias.

Tienes que comparar los elementos dentro de la colección:

List<String> valoresValidos = Arrays.asList("java", "c++");
boolean valido = valoresValidos.size() == valoresSeleccionados.size()
        && valoresSeleccionados.containsAll(valoresValidos);

Para comprobar el tipo retornado por
getValue()
puedes poner un breakpoint e inspeccionar la variable
valoresSeleccionados
. En Internet puedes encontrar muchos tutoriales sobre el debugger de Eclipse (
este es uno de ellos
).

muchas gracias si que sirve…