2016-07-23 72 views
0

我正在構建一個具有幾個單選按鈕的應用程序,根據用戶的選擇我必須做某件事或另一件事。現在我使用了一個OptionGroup來創建單選按鈕,但我似乎無法理解如何區分單選按鈕。在純java中,它非常簡單,因爲我會創建每個單選按鈕,然後使用ButtonGroup對象將它們組合在一起,但在vaadin中我真的不知道。文件是一樣糟糕,所以我有點卡住了。這是給你一些代碼:區分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

你seenn這個實況? https://vaadin.com/docs/-/part/framework/components/components-optiongroup.html –

回答

0

您可以在Vaadin中使用任何對象作爲item 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 
      } 
     }); 
+0

嗨,大家好,我想我明白了。我修改了我的代碼以反映您的建議(我希望),但我仍然有點困惑。我在線程的開頭更新了代碼。 現在這個代碼有效,但是如果我在'single.addItems(「Km to Mile」,「Miles to Km」)中聲明它們時更改了元素的名稱會發生​​什麼情況?事情會打破,所以也許值得複製一下變量中的元素,然後用它來比較,這可能嗎? – antobbo

+0

+ antobbo也許你應該發佈更多的代碼到你的問題。 –

+0

對,我根據要求更新了代碼,但我想我找到了一個很好的方法來做到這一點 – antobbo