2016-07-23 6 views
0

私はいくつかのラジオボタンを持つアプリケーションを構築しています。ユーザーが選択することに基づいて、私は何か別のことをしなければなりません。今は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(){ 


    } 
} 

ベア心​​の中で私は将来的にはより多くのオプションを追加する必要がありますが、私は、ユーザーがラジオボタンを選択し、どんなにあるに取得しようとしています彼は入力用に2つの入力ボックスを、もう1つは読み取り専用で変換を表示します。要点は、選択が行われ、入力ボックスが表示されたときに、入力を取得して正しく変換できる必要があるため、ユーザーがどの選択を行ったかを知る必要があることです。上記のコードでは、ユーザーの選択肢を表示していますが、チェックしたり比較したりすることはありません。私がしたいのは理想的です: - 最初のラジオボタンをクリックしてください - どのラジオボタンが選択されているかを確認して、どの変換を使用するかを知っています。

+0

は、あなたがこのドキュメンタリーをseennがありますか? https://vaadin.com/docs/-/part/framework/components/components-optiongroup.html –

答えて

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

こんにちは、ありがとう、私は理解していると思います。あなたの提案を反映するようにコードを修正しましたが、私はまだ少し困惑しています。スレッドの先頭でコードを更新しました。 このコードは今動作していますが、 'single.addItems(" Km to miles "、" Miles to Km ");で宣言したときに要素の名前を変更するとどうなりますか?物事が壊れるので、何とかコピーする価値があるかもしれません。変数の中の要素をそれを比較のために使うことは可能でしょうか? – antobbo

+0

+ antobbo多分、あなたの質問にもっとコードを投稿するべきです。 –

+0

そうですね、要求通りにコードを更新しましたが、良い方法を見つけたと思います。 – antobbo