区分vaadin中的单选按钮

时间:2016-07-23 21:42:41

标签: java vaadin vaadin7

我正在构建一个具有几个单选按钮的应用程序,根据用户选择的选项,我必须做一件事或另一件事。现在我使用了一个OptionGroup来创建单选按钮,但我似乎无法理解如何区分单选按钮。在纯java中,它非常简单,因为我创建每个单选按钮,然后将它们与ButtonGroup对象组合在一起但在vaadin中我真的不知道。文档像往常一样糟透了,所以我有点卡住了。以下是一些代码:

    public class ConverterComponent extends CustomComponent{

    private TextField name2 = new TextField();
    private OptionGroup single;
    private TextField userInput;
    private TextField result;
    private Button submit;
    private Button reset;
    private static final String conversion1 = "Km to miles";
    private static final String conversion2 = "Miles to Km";
    private static final long serialVersionUID = 1L;
    public ConverterComponent(){
        submit = new Button("Submit");
        reset = new Button("Reset");
        result = new TextField();
        userInput = new TextField();
        result.setEnabled(false);
        result.setVisible(false);
        userInput.setVisible(false);
        reset.setVisible(false);
        submit.setVisible(false);

        single = new OptionGroup("Select the conversion");
        single.addItems(conversion1, conversion2);

        reset.addClickListener(new Button.ClickListener(){          
            @Override
            public void buttonClick(ClickEvent event){
                clearFields();      
                getResult().setVisible(false);
            }
        });
        submit.addClickListener(new Button.ClickListener(){         
            @Override
            public void buttonClick(ClickEvent event) {             
                getResult().setVisible(true);
                //NEED TO KNOW WHICH RADIO BUTTON HAS BEEM CLICKED SO THAT i CAN DECIDE WHICH CONVERSION TO USE

            }
        });

        single.addValueChangeListener(new Property.ValueChangeListener(){           
            @Override
            public void valueChange(ValueChangeEvent event) {
                clearFields();
                /*System.out.println("You chose: " + event.getProperty().getValue().toString() + "\n");
                System.out.println("other line " + event.getProperty() + "\n" + " id is " + single.getId() + " size " + single.size());*/

                //System.out.println("event is " + event.getProperty().getValue());                     

                switch(event.getProperty().getValue().toString()){
                case conversion1:
                    System.out.println(conversion1);
                    break;
                case conversion2:
                    System.out.println(conversion2);
                    break;
                }
                displayFields();

            }
        });
    }   
    public OptionGroup getRadioButtons(){
        return single;
    }
    public TextField getResult(){
        return result;
    }
    public TextField getUserInput(){
        return userInput;
    }
    public void displayFields(){
        //getResult().setVisible(true);
        getUserInput().setVisible(true);
        getResetButton().setVisible(true);
        getSubmitButton().setVisible(true);
    }
    public Button getResetButton(){
        return reset;
    }
    public Button getSubmitButton(){
        return submit;
    }
    public void clearFields(){
        getResult().setValue("");
        getUserInput().setValue("");
    }
    public void validateInputs(){


    }
}

请记住,我必须在将来添加更多选项,但我想要的是,当用户选择一个单选按钮时,无论哪个,他都会得到两个输入框,一个用于他的输入和另一个 - 只读 - 显示转换。关键是当进行选择并显示输入框时,我必须知道用户已经做出了什么选择,因为我必须能够获取输入并正确转换它。在上面的代码中我显示了用户的选择,但我没有任何东西可以检查或比较它。理想情况下,我想做的是: - 单击第一个单选按钮 - 确定选择了哪个单选按钮,以便知道要使用哪个转换。

1 个答案:

答案 0 :(得分:0)

您可以在Vaadin中将任何对象用作项ID。例如,您可以这样做:

例如,如果你有一个枚举呈现不同的转换

    public enum Conversion {
        KM_TO_MILES,
        MILES_TO_KM
    }
那么你可以这样做:

        OptionGroup optionGroup = new OptionGroup();

        optionGroup.addItem(Conversion.KM_TO_MILES);
        optionGroup.setItemCaption(Conversion.KM_TO_MILES, "Km to miles");

        optionGroup.addItem(Conversion.MILES_TO_KM);
        optionGroup.setItemCaption(Conversion.MILES_TO_KM, "Miles to Km");

        optionGroup.addValueChangeListener(e -> {
            if (e.getProperty().getValue() == Conversion.KM_TO_MILES) {
                // km to miles selected
            }
        });