我正在GWT中编写一个Composite
小部件,并且希望它能够实现HasSelectionHander
并在选择复合元素时触发SelectionEvent
到目前为止,我有以下内容:
public class SelectionClass extends Composite implements HasSelectionHandlers<Integer>{
private final EventBus eventBus = new SimpleEventBus();
//...
private void somethingHappens(int i){
//How do i fire an event?
}
@Override
public HandlerRegistration addSelectionHandler(SelectionHandler<Integer> handler) {
return eventBus.addHandler(SelectionEvent.getType(), handler);
}
}
public AnotherClass{
// ...
SelectionClass.addSelectionHandler(new SelectionHandler<Integer>() {
@Override
public void onSelection(SelectionEvent<Integer> event) {
Window.alert(String.valueOf(event.getSelectedItem()));
}
});
// ...
}
我对如何实现事件的触发感到有点困惑。我是否正确使用SelectionClass中的EventBus
(上图)。任何帮助将不胜感激。
答案 0 :(得分:2)
事件的触发是通过EventBus
API完成的,在GWT 2.4中,您不需要实例化您自己的'EventBus'实例,因为您可以将addXXXHandler
方法委托给超级Composite
类。
它类似于以下内容:
public class SelectionClass extends Composite implements HasSelectionHandlers<Integer>{
//...
private void somethingHappens(int i){
SelectionEvent.<Integer>fire(this, i);
}
@Override
public HandlerRegistration addSelectionHandler(SelectionHandler<Integer> handler) {
return super.addHandler(handler, SelectionEvent.getType());
}
}