Как включить кнопку при заполнении текстового поля с помощью VAADIN - PullRequest
0 голосов
/ 08 ноября 2018

Я работаю с Ваадином. У меня есть текстовое поле и кнопка. Моя кнопка изначально отключена. Когда мое текстовое поле заполнено действительными данными, моя кнопка должна активироваться. Я не могу активировать свою кнопку. Не могли бы вы помочь мне ? Спасибо

public static DynTextField createFromElement(Element elt, DynForm form) {
    if (elt.getNodeName().equals("param") && elt.getAttribute("type").equals("TEXT")) {
        DynTextField dtf = new DynTextField();
        dtf.setForm(form);
        if (elt.hasAttribute("texte"))
            dtf.setCaption(elt.getAttribute("texte"));
        dtf.nom = elt.getAttribute("nom");
        if (elt.hasAttribute("FORMAT"))
            dtf.setFormat(elt.getAttribute("FORMAT"));
        dtf.setDescription(elt.getAttribute("description"));
        dtf.setStyleName("param" + (elt.hasAttribute("class") ? elt.getAttribute("class") : ""));
        return dtf;
    } else
        return null;
}

private void setFormat(String attribute) {
    binder = new Binder<>();
    binder.forField(this).withValidator(new RegexpValidator("Saisie obligatoire !!", attribute)).asRequired("Format Erroné").bind(No.getter(), No.setter());
    //new Binder<>().forField(this).withValidator(new RegexpValidator(attribute, "Format Erroné")).asRequired();

}

// convenience empty getter and setter implementation for better readability 
public static class No { 
 public static <SOURCE, TARGET> ValueProvider<SOURCE, TARGET> getter() { 
  return source -> null; 
 } 

 public static <BEAN, FIELDVALUE> Setter<BEAN, FIELDVALUE> setter() { 
  return (bean, fieldValue) -> { 
   //no op 
  }; 
 } 
}   

Программа, которая создает мою кнопку. Здесь я бы хотел, чтобы моя кнопка была активной.

public DynButton(DynForm form, String as400PGMName, String[] parameterList) {
    super(VaadinIcons.CHECK);
    this.as400PGMName = as400PGMName;
    if (parameterList.length == 1 && parameterList[0].equals(""))
        this.parameterList = new String[] {};
    else
        this.parameterList = parameterList;
    this.form = form;
    addClickListener(event -> {
        fireClickEvent(event);
    });

    addClickListener(this);
    impl = new DynComponentImpl();

     //boutton initially disable
     this.setEnabled(isActif());


}

1 Ответ

0 голосов
/ 08 ноября 2018

Вы можете сделать это с помощью слушателя либо в текстовом поле, либо в подшивке

textField.addValueChangeListener(e -> 
        myButton.setEnabled(!e.getValue().equals("")));

или

binder.addStatusChangeListener(e -> 
        myButton.setEnabled(!e.hasValidationErrors()));
...