我需要編寫自定義ValueChangeHandler
並呼叫onValueChange(ValueChangeEvent)
。但我不明白如何寫一個ValueChangeEvent
。自定義ValueChangeHandler GWT
也許我理解整個GWT事件系統是錯誤的。誰能幫忙?
編輯:我在問如何創建我自己的派發ValueChangeEvent的類。我明白如何聽它。
ValueChangeEvent的構造函數不可見,我無法創建它。
我需要編寫自定義ValueChangeHandler
並呼叫onValueChange(ValueChangeEvent)
。但我不明白如何寫一個ValueChangeEvent
。自定義ValueChangeHandler GWT
也許我理解整個GWT事件系統是錯誤的。誰能幫忙?
編輯:我在問如何創建我自己的派發ValueChangeEvent的類。我明白如何聽它。
ValueChangeEvent的構造函數不可見,我無法創建它。
如果你想發射一個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
你想火的類型。
因爲你無法創建ValueChangeEvent直接分派事件,通過火法完成:
ValueChangeEvent.fire(this, value);
凡this
是指實施HasValueChangeHandlers
和value
類/場是指已經值改變並且你想分派事件。
ValueChangeEvent
是由GWT爲您生成的。您可以將一個(或多個)ValueChangeHandler
添加到實現接口HasValueChangeHandlers
的任何類。其中一個班是TextArea
,讓我們看一個小例子:
TextArea textArea = new TextArea();
textArea.addValueChangeHandler(new ValueChangeHandler<String>() {
@Override
public void onValueChange(ValueChangeEvent<String> event) {
// do something
}
});
當文本區域的值發生變化,GWT會自動生成一個ValueChangeEvent,您可以在我打上了部分使用「do東西」。
我不需要那樣。我正在創建自己的「TextArea」,我需要像TextArea那樣分派ValueChangeEvent。 –
好的,你的問題表明你想知道如何編寫一個ValueChangeHandler(而不是HasValueChangeHandlers實現):-) –
是的,抱歉的誤導性問題。英語不是我的本地語言:(。 –
真的來不及回答,但我剛剛解決了這個問題是這樣的:
ValueChangeEvent.fire(hasValueChangeHandlerInstance, getValue());
事實上,而不是創建一個新的EventBus或HandlerManager,因爲你的widget將Wiget的子類,它的標準的方法是使用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());
}
}
}
該類僅需實現HasValue
謝謝,我現在有一切工作,但我不知道與EventBut緊密相關。 –
@Hilibrand - 嘿,我需要在GWT 2.0.4中再次做到這一點。沒有EventBus,我找不到任何參考,你知道它是如何完成的嗎 –
對於GWT 2.0.4,你可以使用'com.google.gwt.event.shared.HandlerManager'類,你可以初始化它與當前類:'new HandlerManager(this);' –