美好的一天
我有一个自定义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 myIndicatorTextField;
@UiHandler(“ myIndicatorTextField)
公共无效onKeyUp(KeyUpEvent事件){
validateFields();
}
如果要通过调用构造函数进行创建,则可以在其上调用addKeyUpHandler
IndicatorTextField myIndicatorTextField =新的IndicatorTextField();
myIndicatorTextField.addKeyUpHandler(new KeyUpHandler(){
公共无效onKeyUp(KeyUpEvent事件){
validateFields();
}
});