美好的一天

我有一个自定义TextBox,它具有IndicatorTextBox.ui.xml文件以及IndicatorTextBox.java文件。
通常,将evenhadler添加到文本框很简单。

这是在我的主要.java文件中

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


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

IndicatorTextBox.java文件如下所示

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


公共类IndicatorTextField扩展Composite实现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);

}

最佳答案

您的IndicatorTextField首先必须实现HasKeyUpHandlers接口,从文本框中捕获KeyUpEvent,然后将其触发到其处理程序。

公共类IndicatorTextField扩展了Composite实现HasText,HasKeyUpHandlers {
...

@Override
公共HandlerRegistration addKeyUpHandler(KeyUpHandler handler){
返回addHandler(handler,KeyUpEvent.getType());
}

...

@UiHandler(“ textBox”)
公共无效onKeyUp(KeyUpEvent事件){
DomEvent.fireNativeEvent(event.getNativeEvent(),this);
}

}


然后在您的主要Java类中,如果您要使用uiBinder创建此IndicatorTextField,则只需按常规方式向其添加UiHandler

@UiField
IndicatorTextField myIndi​​catorTextField;

@UiHandler(“ myIndi​​catorTextField)
公共无效onKeyUp(KeyUpEvent事件){
validateFields();
}


如果要通过调用构造函数进行创建,则可以在其上调用addKeyUpHandler

IndicatorTextField myIndi​​catorTextField =新的IndicatorTextField();
myIndi​​catorTextField.addKeyUpHandler(new KeyUpHandler(){
公共无效onKeyUp(KeyUpEvent事件){
validateFields();
}
});

07-26 02:12