美好的一天
我有一个自定义TextBox,它有一个IndicatorTextBox.ui.xml文件以及IndicatorTextBox.java文件。 通常在文本框中添加均衡器很简单。
这是我的主要.java文件
@UiHandler("txtFirstName")
void onTxtFirstNameKeyUp(KeyUpEvent event){
validateFields();
}
如果txtFirstName是带有我要添加到此页面的标签的自定义文本框,我将如何添加处理程序。 因此,换句话说,txtFirstnName不是 @UiField TextBox txtFirstName ,而是 IndicatorTextField txtFirstName 。
IndicatorTextBox.java文件如下所示
import com.google.gwt.core.client.GWT;
public class IndicatorTextField extends Composite implements 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);
}
答案 0 :(得分:1)
你的IndicatorTextField首先要实现HasKeyUpHandlers接口,从textBox中捕获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(); } });
答案 1 :(得分:0)
UiBinder,据我了解这种机制,根据方法签名中的事件类型创建调用,因此 IndicatorTextField 必须实现 HasAllKeyHandlers 或者只是扩展 FocusWidget