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