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