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

Java 将eventhandler添加到自定义文本框字段,java,gwt,uibinder,Java,Gwt,Uibinder,你好 我有一个自定义文本框,其中包含IndicatorTextBox.ui.xml文件和IndicatorTextBox.java文件。 通常,在文本框中添加一个evenhadler很简单 这在我的main.java文件中 @UiHandler("txtFirstName") void onTxtFirstNameKeyUp(KeyUpEvent event){ validateFields(); } 如果txtFirstName是我正在添加到此页面的带有标签的自定义文本框,我将如何添加处理

你好

我有一个自定义文本框,其中包含IndicatorTextBox.ui.xml文件和IndicatorTextBox.java文件。 通常,在文本框中添加一个evenhadler很简单

这在我的main.java文件中

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

IndicatorTextBox.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);

}
公共接口活页夹扩展了UiBinder{
}
私有静态最终绑定器Binder=GWT.create(Binder.class);
公共接口样式扩展了CssResource{
字符串textStyling();
字符串requireInputLabel();
字符串colorNotValidated();
}
@尤菲尔德风格;
@UiField标签;
@UiField文本框文本框;
公共指示符textfield()
{
initWidget(binder.createAndBindUi(this));
}
公共void setBackgroundValidateTextbox(已验证的布尔值)
{
如果(已验证)
{
textBox.getElement().addClassName(style.colorNotValidated());
}
其他的
{
textBox.getElement().removeClassName(style.colorNotValidated());
}
}
@凌驾
公共字符串getText(){
返回label.getText();
}
@凌驾
公共void setText(字符串文本){
label.setText(文本);
}

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

您的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); } } 公共类IndicatorTextField扩展了复合实现HastText,HasKeyUpHandlers{ ... @凌驾 公共句柄注册addKeyUpHandler(KeyUpHandler处理程序){ 返回addHandler(handler,KeyUpEvent.getType()); } ... @UiHandler(“文本框”) 公共无效onKeyUp(KeyUpEvent事件){ fireNativeEvent(event.getNativeEvent(),this); } } 然后在主java类中,如果您使用uiBinder创建这个IndicatorTextField,那么您只需以常规方式向其添加一个UiHandler

@UiField IndicatorTextField myIndicatorTextField; @UiHandler("myIndicatorTextField) public void onKeyUp(KeyUpEvent event) { validateFields(); } @尤菲尔德 IndicatorTextField myIndicatorTextField; @UiHandler(“myIndicatorTextField”) 公共无效onKeyUp(KeyUpEvent事件){ validateFields(); } 如果您是通过调用构造函数来创建的,那么就对其调用addKeyUpHandler

IndicatorTextField myIndicatorTextField = new IndicatorTextField(); myIndicatorTextField.addKeyUpHandler(new KeyUpHandler() { public void onKeyUp(KeyUpEvent event) { validateFields(); } }); IndicatorTextField myIndicatorTextField=新IndicatorTextField(); myIndicatorTextField.addKeyUpHandler(新的KeyUpHandler(){ 公共无效onKeyUp(KeyUpEvent事件){ validateFields(); } });