有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将eventhandler添加到自定义文本框字段

你好

我有一个自定义文本框,它有一个指示符号TextBox。用户界面。xml文件以及IndicatorTextBox。java文件。 通常,在文本框中添加一个evenhadler很简单

这是我的主要任务。java文件

@UiHandler("txtFirstName")
void onTxtFirstNameKeyUp(KeyUpEvent event){ 
validateFields();
}

如果txtFirstName是我正在添加到此页面的带有标签的自定义文本框,我将如何添加处理程序。? 因此,换句话说,txtFirstnName不是@UiField TextBox txtFirstName,而是指示符textfield txtFirstName

指示灯显示框。java文件如下所示

import com.google.gwt.core.client.GWT;

公共类IndicatorTextField扩展了复合实现HasText{

public interface Binder extends UiBinder<Widget, IndicatorTextField> {
}

private static final Binder binder = GWT.create(Binder.class);

public interface Style extends CssResource{
    String textStyling();
    String requiredInputLabel();
    String colorNotValidated();


}

@UiField Style style;
@UiField Label label;
@UiField TextBox textBox;


public IndicatorTextField()
{

    initWidget(binder.createAndBindUi(this));
}

public void setBackgroundValidateTextbox(boolean validated)
{
    if(validated)
    {
        textBox.getElement().addClassName(style.colorNotValidated());
    }
    else
    {
        textBox.getElement().removeClassName(style.colorNotValidated());

    }

}

@Override
public String getText() {

    return label.getText();
}

@Override
public void setText(String text) {
    label.setText(text);

}

共 (2) 个答案

  1. # 1 楼答案

    您的IndicatorTextField首先必须实现HasKeyUpHandlers接口,从文本框捕获KeyUpEvents并将其发送到其处理程序

    public class IndicatorTextField extends Composite implements HasText, HasKeyUpHandlers {
        ...
    
        @Override
        public HandlerRegistration addKeyUpHandler(KeyUpHandler handler)  {
            return addHandler(handler, KeyUpEvent.getType());
        }
    
        ...
    
        @UiHandler("textBox")
        public void onKeyUp(KeyUpEvent event) {
            DomEvent.fireNativeEvent(event.getNativeEvent(), this);
        }
    
    }
    

    然后在主java类中,如果您使用uiBinder创建这个IndicatorTextField,那么您只需以常规方式向其添加一个UiHandler

    @UiField
    IndicatorTextField myIndicatorTextField;
    
    @UiHandler("myIndicatorTextField)
    public void onKeyUp(KeyUpEvent event) {
        validateFields();
    }
    

    如果您是通过调用构造函数来创建的,那么就对其调用addKeyUpHandler

    IndicatorTextField myIndicatorTextField = new IndicatorTextField();
    myIndicatorTextField.addKeyUpHandler(new KeyUpHandler() {
        public void onKeyUp(KeyUpEvent event) {
            validateFields();
        }
    });
    
  2. # 2 楼答案

    据我所知,UiBinder根据方法签名中的事件类型创建调用,因此您的IndicatorTextField必须实现HasAllKeyHandlers或只是扩展FocusWidget