首页 > 解决方案 > 如何将 ValueChangeHandler 添加到自定义 DateBox?

问题描述

我想将值更改处理程序的功能添加到扩展 DateBox 的自定义类中。我已经添加了键处理程序,但我还想将值更改处理程序实现到同一个类。

当我从 DatePicker 或键盘获取输入时,我希望我的 DateBox 能够正常工作。

任何其他建议也会有所帮助。

public class ValidationDateBoxInternal extends DateBox implements KeyUpHandler{
    
    private List<String> regexList;
    
    public ValidationDateBoxInternal(){
        super();
        this.getTextBox().addKeyUpHandler(this);
        regexList = new ArrayList<String>();
    }
    
    
    public void setAsNotEmpty() {
          regexList.add(DateValidation.isNotEmpty);
          isValid();
       }
    
    
    public void setAsValidDate(){
        regexList.add(DateValidation.isValidDate);
        isValid();
    }
       
    
    public void onKeyUp(KeyUpEvent event) {
          isValid();
       }
    
    
    public void setText(String text) {
          super.getTextBox().setText(text);
          isValid();
       }
    
    
    
    
    
   public void clearRegexList() {
      regexList.clear();
   }
   
   public String getText() {
          if (regexList.size() == 0) {
             return super.getTextBox().getText();
          }
          if (isValid()) {
             for (String regex: regexList) {
                if (regex.equals(DateValidation.isValidDate)) {
                   return super.getTextBox().getText().toLowerCase().trim();
                }
             }
             return super.getTextBox().getText().trim();
          }
          else {
             return null;
          }
       }
   
   public boolean isValid() {
      for (String regex: regexList) {
         if (!DateValidation.isValid(super.getTextBox().getText(), regex)) {
            this.addStyleName("invalid");
            return false;
         }
      }
      this.removeStyleName("invalid");
      return true;
   }
}


标签: gwtevent-handlingcustomizationdatebox

解决方案


您的类 extends DateBox,它实现了HasValueChangeHandlers接口。所以你可以打电话:

DateBox.addValueChangeHandler(ValueChangeHandler<java.util.Date> handler)

例如:

public class MyDateBox extends DateBox implements ValueChangeHandler<Date> {
    void foo() {
        addValueChangeHandler(this);
    }

    void onValueChange(ValueChangeEvent<Date> event) {
         // validate the value of the DateBox
    }
}

推荐阅读