自定义ValueChangeHandler GWT

时间:2011-08-01 19:49:04

标签: java javascript gwt

我需要编写自定义ValueChangeHandler并调出onValueChange(ValueChangeEvent)。但是我不明白如何写ValueChangeEvent

也许我理解整个GWT事件系统是错误的。有人可以帮忙吗?

编辑:我在问我如何创建自己的调度ValueChangeEvent的类。我理解如何倾听它。

ValueChangeEvent的构造函数不可见,我无法创建它。

4 个答案:

答案 0 :(得分:15)

如果您要发射ValueChangeEvent,则必须由您或您的班级或班级中的某个位置实施界面HasValueChangeHandlers

一个简单的实现是使用EventBus:

EventBus bus = new SimpleEventBus();

@Override
public void fireEvent(GwtEvent<?> event) {
    bus.fireEvent(event);
}

@Override
public HandlerRegistration addValueChangeHandler(ValueChangeHandler<T> handler) {
    return bus.addHandler(ValueChangeEvent.getType(), handler);
}

请注意,您需要将T替换为您要触发的类型。

因为您无法直接通过fire方法创建ValueChangeEvent调度事件:

ValueChangeEvent.fire(this, value);

this指的是实现HasValueChangeHandlers的类/字段,而value指的是已更改的值,您希望调度该事件。

答案 1 :(得分:11)

实际上,由于您的窗口小部件将是Wiget的子类,而不是创建新的EventBus或HandlerManager,标准方法是使用Widget.addHandler(handler,eventType)方法。这是一个最小的例子:

    public class MyWidget<T> extends Composite implements HasValueChangeHandlers<T>, HasValue<T> {

    private T value;

    public MyWidget() {
        // Initialize stuff
    }

    @Override
    public HandlerRegistration addValueChangeHandler(final ValueChangeHandler<T> handler) {
        return addHandler(handler, ValueChangeEvent.getType());
    }

    @Override
    public T getValue() {
        return value;
    }

    @Override
    public void setValue(T value) {
        setValue(value, false);
    }

    @Override
    public void setValue(T value, boolean fireEvents) {
        this.value = value;
        if (fireEvents) {
            ValueChangeEvent.fire(this, getValue());
        }
    }
}

答案 2 :(得分:1)

回答真的很晚,但我刚刚解决了这个问题:

ValueChangeEvent.fire(hasValueChangeHandlerInstance, getValue());

答案 3 :(得分:0)

GWT为您生成ValueChangeEvent。您可以向实现接口ValueChangeHandler的任何类添加一个(或多个)HasValueChangeHandlers。其中一个类是TextArea,所以让我们看一个小例子:

    TextArea textArea = new TextArea();

    textArea.addValueChangeHandler(new ValueChangeHandler<String>() {

        @Override
        public void onValueChange(ValueChangeEvent<String> event) {
            // do something
        }
    });

当文本区域的值发生变化时,GWT将自动生成一个ValueChangeEvent,您可以在我标记为“do something”的部分中使用它。