Java 如何使addValueChangeHandler像addChangeHandler一样工作
我制作了一个wrap小部件,它实现了接口HasChangeHandlers 但我就是不能把事情安排在一起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
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")