2012-06-14 64 views
0

好日子添加事件處理程序爲自定義文本字段

我有有IndicatorTextBox.ui.xml文件的自定義文本框以及IndicatorTextBox.java文件。 向文本框中添加一個evenhadler很簡單。

這是我主要的java文件

@UiHandler("txtFirstName") 
void onTxtFirstNameKeyUp(KeyUpEvent event){ 
validateFields(); 
} 

我將如何添加處理程序,如果txtFirstName與標籤定製文本框,我加入到這個頁面? 因此,換句話說txtFirstnName不是@UiField TextBox txtFirstNameIndicatorTextField 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); 

} 

回答

1

您的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); 
    } 

} 

然後在你的主Java類,如果您要創建這個IndicatorTextField用UiBinder的,那麼你可以只添加一個UiHandler給它的常規方式

 
@UiField 
IndicatorTextField myIndicatorTextField; 

@UiHandler("myIndicatorTextField) 
public void onKeyUp(KeyUpEvent event) { 
    validateFields(); 
} 

如果你通過調用創建構造函數,然後調用addKeyUpHandler就可以了

 
IndicatorTextField myIndicatorTextField = new IndicatorTextField(); 
myIndicatorTextField.addKeyUpHandler(new KeyUpHandler() { 
    public void onKeyUp(KeyUpEvent event) { 
     validateFields(); 
    } 
}); 
0

UiBinder的,據我瞭解這種機制,創建取決於方法事件類型調用簽名,所以你的IndicatorTextField必須實現HasAllKeyHandlers或只是延長FocusWidg et

相關問題