gpt4 book ai didi

java - 如何在GWT中为BlurEvent正确添加UiHandler?

转载 作者:行者123 更新时间:2023-12-01 12:24:06 25 4
gpt4 key购买 nike

通常,如果我们在 GWT 中有一些 textField,我们可以通过以下代码添加 BlurHandler:

textField.addBlurHandler(new BlurHandler() {
@Override
public void onBlur(BlurEvent event) {
//what we need
}
});

但是如果我们使用 UiBinder 并且我们的 textField 由 @UiField 注释,并且在我们的 ui.xml 文件中提到,我们也可以通过以下代码添加 BlurHandler:

@UiHandler("textField")
protected void createBlurHandler(BlurEvent event) {

}

我想我就在这里,因为它是这样工作的。所以,问题是,我们可以在 ui.xml 文件中实际定义 BlurHandler 吗?

例如,可以在那里添加inputMaxLength和其他一些属性,GWT是否有像onChange方法这样的可能性,或者我描述的这些方式是唯一的可能性?

我想要这样的东西:

<g:TextBox ui:field="textField" onBlur="methodName" />

可能吗?

最佳答案

我很确定你所问的是不可能的。问题是您无法使用反射来确定要调用哪个方法。但是,您可以扩展 TextBox 类并在模板中使用它。扩展类可以有自己的属性,可以在模板中设置。示例如下,我在自己的 DefaultTextBox 上设置了默认测试。

public class DefaultTextBox extends TextBox {

/**
* The text color used when the box is disabled and empty.
*/
private static final String TEXTBOX_DISABLED_COLOR = "#AAAAAA";

private final String defaultText;

public @UiConstructor
DefaultTextBox(final String defaultText) {
this.defaultText = defaultText;
resetDefaultText();

// Add focus and blur handlers.
addFocusHandler(new FocusHandler() {
@Override
public void onFocus(FocusEvent event) {
getElement().getStyle().clearColor();
getElement().getStyle().clearFontStyle();
if (defaultText.equals(getText())) {
setText("");
}
}
});

addBlurHandler(new BlurHandler() {
@Override
public void onBlur(BlurEvent event) {
if ("".equals(getText())) {
resetDefaultText();
}
}
});
}

public String getDefaultText() {
return defaultText;
}

@Override
public void setText(String text) {
if (text == null) {
super.setText(getDefaultText());
} else {
getElement().getStyle().clearColor();
getElement().getStyle().clearFontStyle();
super.setText(text);
}
}

public String getText() {

return super.getText();
}

/**
* This is override so that the editor framework will not get the default
* value but the actual null value when the default text is in the box.
*/
@Override
public String getValue() {
try {
return getValueOrThrow();
} catch (ParseException e) {
return null;
}

}

@Override
public void setValue(String value) {
setText(value);
}

/**
* This is overridden from the parent class because this is
* how the editor gets the value.
*/
public String getValueOrThrow() throws ParseException {
if (defaultText.equals(super.getValueOrThrow())) {
return null;
}
return super.getValueOrThrow();
}


/**
* Reset the text box to the default text.
*/
public void resetDefaultText() {
setText(defaultText);
getElement().getStyle().setColor(TEXTBOX_DISABLED_COLOR);
getElement().getStyle().setFontStyle(FontStyle.ITALIC);
}
}

然后在模板中你可以像这样设置属性。

<w:DefaultTextBox defaultText="name" ui:field="nameTextBox" />

这也适用于 setter ,您可以设置属性而不必使用 @UiConstructor,但就我而言,我想确保此类没有空构造函数。

关于java - 如何在GWT中为BlurEvent正确添加UiHandler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26480214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com