GWT:如何处理从自定义小部件触发的通用事件?

时间:2014-07-21 07:56:23

标签: java events generics gwt

我创建了一个简单的自定义Widget,其中包含一个包含TextBox和Button的HTMLPanel(简而言之)。

由于我不止一次需要这种搜索形式,我想让它变得通用。它到目前为止工作,但我不知道如何使被激活的事件通用。

我的搜索小工具包含:

MyUtils.EVENT_BUS.fireEvent(new SearchEvent(myTextBox.getText()));

我的活动:

    public class SearchEvent extends GwtEvent<SearchEventHandler> {

    public static Type<SearchEventHandler> TYPE = new Type<SearchEventHandler>();
    String toBeSearched;

    public SearchEvent(String aSearchString) {
        toBeSearched = aSearchString;
    }

    public String getToBeSearched() {
        return toBeSearched;
    }

    @Override
    public com.google.gwt.event.shared.GwtEvent.Type<SearchEventHandler> getAssociatedType() {
        return TYPE;
    }

    @Override
    protected void dispatch(SearchEventHandler handler) {
        handler.onSearch(this);     
    }
}

我的EventHandler:

    public interface SearchEventHandler extends EventHandler {
    void onSearch(SearchEvent aSearchEvent);
}

我的问题是我的Widgets发送了一个特定的事件 - 但是我想为我的Widget的另一个实例发起另一个事件。所以我想通过Widget的Contstructor传递事件(以及我在这里遗漏的其他参数)

public SimpleSearch(GwtEvent anEvent) {}

我将其定义为我的Widget的类成员:

private GwtEvent<EventHandler> myEvent;

但是,当我尝试解雇它时,我遇到了类型问题:

myEvent = new GenericSearchEvent(myTextBox.getText()); 
MyUtils.EVENT_BUS.fireEvent(myEvent);

The Line

myEvent = new GenericSearchEvent(myTextBox.getText()); 

不编译,因为Eclipse告诉我:

类型不匹配:无法从SearchEvent转换为GwtEvent

我的问题:如何解决这个问题?

干杯, 添

1 个答案:

答案 0 :(得分:0)

问题是为什么要为Widget的不同实例触发不同的SearchEvent

如果您只想根据Widget的哪个实例触发事件而有不同的行为,我宁愿将其直接编码到您的SearchEvent课程中(即添加enum或引用您的{ {1}} / sender实例并在widget回调中处理它:

onSearch

针对您的具体问题:
将窗口小部件中的类成员更改为public class SearchEvent extends GwtEvent<SearchEventHandler> { public static Type<SearchEventHandler> TYPE = new Type<SearchEventHandler>(); public static enum TYPE {TYPE1,TYPE2} String toBeSearched; Widget sender; TYPE type; public SearchEvent(String aSearchString,Widget sender,TYPE type) { toBeSearched = aSearchString; this.sender = sender; this.type = type; } public String getToBeSearched() { return toBeSearched; } @Override public com.google.gwt.event.shared.GwtEvent.Type<SearchEventHandler> getAssociatedType() { return TYPE; } @Override protected void dispatch(SearchEventHandler handler) { handler.onSearch(this); } } ,您将不会遇到编译错误。