テキストボックスとラベルで構成されるカスタムウィジェットを作成する際にテキストフィールドを単純に拡張し、その後テキストフィールドの機能とイベントハンドリングを継承することは可能でしょうか?
私が理解していることから、通常は Composite を拡張してから、コンストラクターに initWidget() を実装するということです。
initWidget(binder.createAndBindUi(this));
テキストフィールドを拡張するだけで同様のことができますか。
私がこれをしたい理由は、ラベル付きのインジケーターテキストフィールドを既に作成しているためですが、このカスタムウィジェットでイベントハンドリングを適用すると、どこかで使用しようとすると予期しない結果が得られます。
import com.google.gwt.core.client.GWT;
public class IndicatorTextField extends Composite implements HasText, HasKeyUpHandlers{
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);
}
@UiHandler("textBox")
public void onKeyUp(KeyUpEvent event)
{
DomEvent.fireNativeEvent(event.getNativeEvent(), this);
}
@Override
public HandlerRegistration addKeyUpHandler(KeyUpHandler handler) {
//return textBox.addKeyUpHandler(handler);
return addDomHandler(handler, KeyUpEvent.getType());
}
}