0

良い一日

IndicatorTextBox.ui.xml ファイルと IndicatorTextBox.java ファイルを持つカスタム TextBox があります。通常、偶数ハドラーをテキストボックスに追加するのは簡単です。

これは私のメインの .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 implement 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);

}
4

2 に答える 2

1

IndicatorTextField は、最初に HasKeyUpHandlers インターフェイスを実装し、textBox から KeyUpEvents をキャッチして、それらをそのハンドラーに起動する必要があります。

public class IndicatorTextField extends Composite implement HasText, HasKeyUpHandlers {
    ...

    @オーバーライド
    public HandlerRegistration addKeyUpHandler(KeyUpHandler ハンドラ) {
        addHandler(ハンドラ、KeyUpEvent.getType()); を返します。
    }

    ...

    @UiHandler("テキストボックス")
    public void onKeyUp(KeyUpEvent イベント) {
        DomEvent.fireNativeEvent(event.getNativeEvent(), this);
    }

}

次に、メインの Java クラスで、この IndicatorTextField を uiBinder で作成している場合は、通常の方法で UiHandler を追加するだけです。

@UiField
IndicatorTextField myIndi​​catorTextField;

@UiHandler("myIndi​​catorTextField)
public void onKeyUp(KeyUpEvent イベント) {
    validateFields();
}

コンストラクターを呼び出して作成している場合は、その上で addKeyUpHandler を呼び出します

IndicatorTextField myIndi​​catorTextField = new IndicatorTextField();
myIndi​​catorTextField.addKeyUpHandler(新しい KeyUpHandler() {
    public void onKeyUp(KeyUpEvent イベント) {
        validateFields();
    }
});
于 2012-06-14T08:59:09.567 に答える
0

私がこのメカニズムを理解しているように、UiBinderはメソッド署名のイベントタイプに応じて呼び出しを作成するため、IndicatorTextFieldはHasAllKeyHandlersを実装するか、単にFocusWidgetを拡張する必要があります。

于 2012-06-14T08:43:18.903 に答える