0

再会

我有一个自定义文本框,它有一个 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);

}
4

2 回答 2

1

您的 IndicatorTextField 首先必须实现 HasKeyUpHandlers 接口,从 textBox 捕获 KeyUpEvents 并将它们触发到它的处理程序。

公共类 IndicatorTextField 扩展复合实现 HasText,HasKeyUpHandlers {
    ...

    @覆盖
    公共 HandlerRegistration addKeyUpHandler(KeyUpHandler 处理程序) {
        返回 addHandler(handler, KeyUpEvent.getType());
    }

    ...

    @UiHandler("文本框")
    公共无效 onKeyUp(KeyUpEvent 事件){
        DomEvent.fireNativeEvent(event.getNativeEvent(), this);
    }

}

然后在你的主java类中,如果你用uiBinder创建这个IndicatorTextField,那么你可以按常规方式向它添加一个UiHandler

@UiField
IndicatorTextField myIndi​​catorTextField;

@UiHandler("myIndi​​catorTextField)
公共无效 onKeyUp(KeyUpEvent 事件){
    验证字段();
}

如果您是通过调用构造函数来创建,则在其上调用 addKeyUpHandler

IndicatorTextField myIndi​​catorTextField = new IndicatorTextField();
myIndi​​catorTextField.addKeyUpHandler(new KeyUpHandler() {
    公共无效 onKeyUp(KeyUpEvent 事件){
        验证字段();
    }
});
于 2012-06-14T08:59:09.567 回答
0

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

于 2012-06-14T08:43:18.903 回答