2016-07-23 8 views
0

Ich bin eine Anwendung, die ein paar Radio-Buttons hat und basierend auf der Auswahl, die der Benutzer macht, muss ich das eine oder andere tun. Jetzt habe ich eine OptionGroup verwendet, um die Optionsschaltflächen zu erstellen, aber ich bin nicht in der Lage zu verstehen, wie ich zwischen Optionsfeldern unterscheiden kann. In reinem Java ist das ziemlich einfach, da ich jeden Radio Button erstellen und dann mit einem ButtonGroup-Objekt gruppieren würde, aber in Vaadin weiß ich es wirklich nicht. Die Dokumentation ist wie immer abgründig, also bin ich ein bisschen festgefahren. Hier ist ein Code für Sie:unterscheiden zwischen Radiobuttons in 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(){ 


    } 
} 

Bedenken, die ich habe, um weitere Optionen in der Zukunft hinzufügen, aber was ich versuche zu erreichen ist, wenn die der Benutzer ein Optionsfeld, ganz gleich, was, er wird zwei Eingabefelder eins für seine Eingabe und das andere bekommen - nur lesen - die Konvertierung anzeigen. Der Punkt ist, dass wenn die Auswahl gemacht wird und die Eingabefelder angezeigt werden, ich bereits wissen muss, welche Auswahl der Benutzer getroffen hat, weil ich in der Lage sein muss, die Eingabe zu greifen und sie richtig zu konvertieren. Im obigen Code zeige ich die Wahl des Benutzers an, aber ich habe nichts, um es zu überprüfen oder zu vergleichen. Idealerweise möchte ich folgendes tun: -Klicken Sie auf das erste Optionsfeld - Bestimmen Sie, welches Optionsfeld ausgewählt wurde, damit ich weiß, welche Konvertierung verwendet werden soll.

+0

Haben seenn Sie diesen Film? https://vaadin.com/docs/-/part/framework/components/components-optiongroup.html –

Antwort

0

Sie können beliebige Objekte als Artikel-IDs in Vaadin verwenden. Zum Beispiel könnten Sie so etwas tun:

Wenn Sie zum Beispiel haben eine Enumeration verschiedene Konvertierungen

public enum Conversion { 
     KM_TO_MILES, 
     MILES_TO_KM 
    } 

dann präsentieren Sie so etwas tun könnte:

 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

HI Leute, danke ich denke, ich verstehe. Ich habe meinen Code so geändert, dass er deine Vorschläge widerspiegelt (hoffe ich), aber ich bin immer noch etwas verwirrt. Ich habe den Code am Anfang des Threads aktualisiert. Die Sache ist, dass dieser Code jetzt funktioniert, aber was passiert, wenn wir den Namen der Elemente ändern, wenn ich sie in 'single.addItems (" Km zu Meilen "," Meilen zu Km ") deklariere;'? Die Dinge werden zerbrechen, also ist es vielleicht wert, das Element in einer Variablen irgendwie zu kopieren und dann für den Vergleich zu verwenden, ist das möglich? – antobbo

+0

+ antobbo vielleicht solltest du mehr Code zu deiner Frage posten. –

+0

richtig, Ich habe den Code wie gewünscht aktualisiert, aber ich denke, ich habe einen guten Weg gefunden, es zu tun – antobbo