java - 当其他Panel中的ListBox发生变化时更新Panel内容

标签 java gwt event-handling panel

我是 GWT 新手。

我有两个 ListBox 元素(我们称它们为 AB),位于两个不同的面板(确切地说是 Composite) > 和 VerticalPanel(如果重要的话);我们称它们为 panelApanelB),它们有一个共同的父级 (parentPanel) .
B 更改时,我想更新 A 中的项目列表。

如何在 GWT 中执行此操作?
我的第一个想法是将 changeHandler 添加到 B,其中我在 A 上调用一些公共(public) updateItems() 方法。
然而,panelA 根本无法从 panelB 访问。更糟糕的是,ApanelA 的私有(private)内部类。

我可能可以将所有这些类/方法等公开以使其正常工作,但我觉得这不是正确的方法。
我的设计不好吗?在 GWT 中执行此类操作的正确方法是什么?我想我只是缺少一个开始研究的关键字...

任何帮助将不胜感激。不要求代码,只是一般概念或建议。

最佳答案

使用 Eventbus 创建事件

public class ListBoxBEvent extends GwtEvent<ListBoxBChanged.Handler> {

    public interface Handler extends EventHandler {
        void onListBoxBChanged(ListBoxBEvent listBoxBEvent);
    }

    public static final GwtEvent.Type<Handler> TYPE = new GwtEvent.Type<Handler>();
    private Object selectedObject;

    public VueChangedEvent(Object selectedObject) {
        this.selectedObject=selectedObject;
    }

    @Override
    public GwtEvent.Type<Handler> getAssociatedType() {
        return TYPE;
    }
    @Override
    protected void dispatch(Handler handler) {
        handler.onListBoxBChanged(this);
    }

    public static HandlerRegistration register(EventBus eventBus, Handler handler) {
        return eventBus.addHandler(TYPE, handler);
    }

    public Object getSelectedObject(){
        return selectedObject;
    }

}

在具有ListBoxA的panelA中,您按如下方式注册事件

ListBoxBEvent.register(eventBus, new ListBoxBEvent.Handler() {
            @Override
            public void onListBoxBChanged (ListBoxBEvent listBoxBEvent) {
                Object seletetObject =  listBoxBEvent.getSelectedObject();
                updateListBoxB(seletetObject);
            }           
        }); 

ListBoxBOnChange 事件中,您触发 ListBoxBEvent

view.getListBoxB().addChangeHandler(new ChangeHandler() {
    @Override
    public void onChange(ChangeEvent event) {
       eventBus.fireEvent(new ListBoxBEvent(selectedObject));
    }
});

确保您使用 Singleton 或 DI 通过应用程序使用 EventBus 对象的一个​​实例

关于java - 当其他Panel中的ListBox发生变化时更新Panel内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22102590/

相关文章:

c# - 如何监听 Microsoft-Windows-NetworkProfile/操作日志中的事件?

javascript - 如何在 ReactJS 中创建、监听和触发自定义事件?

java - Heroku 中的 CPU/内存监控(适用于 Java)

java - java中 "this.x"是什么意思?

java - GWT 编辑器和获取/设置值

gwt - 哪个 Google GWT 产品使用 UiBinder?

java - 关于 java.sql.resultset 的问题

java - 修复检查样式错误

java - GWT 数据网格列

javascript - 在 Firefox 中按键不触发