Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GWT:如何处理从自定义小部件触发的一般事件?_Java_Events_Generics_Gwt - Fatal编程技术网

Java GWT:如何处理从自定义小部件触发的一般事件?

Java GWT:如何处理从自定义小部件触发的一般事件?,java,events,generics,gwt,Java,Events,Generics,Gwt,我创建了一个简单的自定义小部件,它包含一个HTMLPanel,其中包含一个文本框和一个按钮(简而言之) 因为我不止一次需要这种搜索表单,所以我想让它变得通用。到目前为止,它还可以工作,但我不知道如何使激发的事件成为通用事件 我的搜索小部件包含: MyUtils.EVENT_BUS.fireEvent(new SearchEvent(myTextBox.getText())); 我的活动: public class SearchEvent extends GwtEvent<Sear

我创建了一个简单的自定义小部件,它包含一个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);     
    }
}
我的问题是我的小部件发送一个特定的事件,但我想为我的小部件的另一个实例触发另一个事件。所以我想通过小部件的Contstructor传递事件(我在这里遗漏了其他参数)

我将其定义为我的小部件的类成员:

private GwtEvent<EventHandler> myEvent;
线路

myEvent = new GenericSearchEvent(myTextBox.getText()); 
不编译,正如Eclipse告诉我的:

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

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

干杯,
Tim

问题是,为什么要为小部件的不同实例触发不同的
SearchEvent

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

公共类SearchEvent扩展了GwtEvent{
公共静态类型=新类型();
公共静态枚举类型{TYPE1,TYPE2}
弓弦;
小部件发送器;
类型;
publicsearchEvent(字符串aSearchString,小部件发送者,类型){
tobearch=aSearchString;
this.sender=发送方;
this.type=type;
}
公共字符串getToBeSearched(){
回归创业;
}
@凌驾
public com.google.gwt.event.shared.GwtEvent.Type getAssociatedType(){
返回类型;
}
@凌驾
受保护的无效分派(SearchEventHandler处理程序){
handler.onSearch(此);
}
}
针对您的具体问题:

将小部件中的类成员更改为
private GwtEventHello,我希望一个小部件触发不同事件的原因是我希望重用我的搜索小部件。假设您有一个具有不同搜索区域的网页,但搜索表单本身看起来应该是相同的。然后,我将创建我的小部件的两个实例,每个实例触发一个不同的事件(因此是一个不同的搜索)。我会试试你的解决方案,然后再打给你,谢谢。
private GwtEvent<EventHandler> myEvent;
myEvent = new GenericSearchEvent(myTextBox.getText()); 
MyUtils.EVENT_BUS.fireEvent(myEvent);
myEvent = new GenericSearchEvent(myTextBox.getText()); 
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);     
    }
}