Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.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 如何使addValueChangeHandler像addChangeHandler一样工作_Java_Gwt_Event Handling - Fatal编程技术网

Java 如何使addValueChangeHandler像addChangeHandler一样工作

Java 如何使addValueChangeHandler像addChangeHandler一样工作,java,gwt,event-handling,Java,Gwt,Event Handling,我制作了一个wrap小部件,它实现了接口HasChangeHandlers 但我就是不能把事情安排在一起 public HandlerRegistration addChangeHandler( final ChangeHandler handler ) { HandlerRegistration registration1 = dateFrom.addValueChangeHandler( handler );// Compile error HandlerRegistrat

我制作了一个wrap小部件,它实现了接口HasChangeHandlers

但我就是不能把事情安排在一起

public HandlerRegistration addChangeHandler( final ChangeHandler handler ) {
    HandlerRegistration registration1 = dateFrom.addValueChangeHandler( handler );// Compile error

    HandlerRegistration registration2 = dateTo.addValueChangeHandler( new ValueChangeHandler<Date>() {
        @Override
        public void onValueChange( ValueChangeEvent<Date> dateValueChangeEvent ) {
              //have to fire handler ??
        }
    } );

    return null; // what i should return here?
}
public handler注册addChangeHandler(最终的ChangeHandler处理程序){
HandlerRegistration registration1=dateFrom.addValueChangeHandler(handler);//编译错误
HandlerRegistration registration2=dateTo.addValueChangeHandler(新的ValueChangeHandler(){
@凌驾
ValueChange上的公共作废(ValueChangeEvent日期ValueChangeEvent){
//必须解雇处理人员吗??
}
} );
return null;//我应该在这里返回什么?
}

提前谢谢

ChangeHandler不是ValueChangeHandler。您必须创建另一个包装器类,该类实现ValueChangeHandler并将ChangeHandler作为实例变量。然后你可以写

HandlerRegistration1=dateFrom.addValueChangeHandler(新的ChangeHandlerWrapper(handler))

其中ChangeHandlerWrapper是实现ValueChangeHandler的类。比如说,

class ChangeHandlerWrapper<T> implements ValueChangeHandler<Date>
{
   private ChangeHandler handler;

   public void onValueChange( ValueChangeEvent<T> changeEvent) {
      handler.onChange(null);
   }
}
class ChangeHandlerWrapper实现ValueChangeHandler
{
私有变更处理程序;
ValueChange上的公共无效(ValueChangeEvent changeEvent){
handler.onChange(null);
}
}

当然,这假设您不需要处理程序中的实际事件。如果这样做,事情将变得更加复杂。

返回希望事件关联的成员对象的处理程序。例如,我有一个textbox+标签小部件,我无法从某个地方在其上创建@UiHandler事件,因为它不是标准的,所以我所做的是:

public class TextBoxAndLabel implements HasKeyUpHandlers {

private TextBox myTextBox;
private Label myLabel;


    @Override
    public HandlerRegistration addKeyUpHandler(KeyUpHandler keyUpHandler) {
        return myTextBox.addKeyUpHandler(keyUpHandler);
    }

}
现在我可以实现了

@UiHandler("myClassObject")