1

我有很多 DisclosurePanel 嵌套在另一个里面(或者也可能没有嵌套)。我想实现“全部展开”和“全部折叠”按钮。请提出一个干净的方法来做到这一点。

注意:我试着看一下 GWT 中的事件处理,但对事情有点困惑。我不确定是否可以为我的案例使用自定义事件。似乎我可以定义一个自定义事件及其处理程序并执行 addHandler() 的东西,但是在将实现处理程序接口的类中,我没有允许我使用 setOpen() 属性的 DisclosurePanel 实例的披露面板。

4

1 回答 1

2

这样做的一种方法是自省 Widget 层次结构。从最上面的父披露面板开始,查看所有子小部件,检查它们是否是 DisclosurePanel,然后打开/关闭它们。如果有许多小部件,这可能对性能不利,但无论如何您都可以尝试。

此代码尚未经过测试,但可能会满足您的需要:

void openChildren(Widget w, boolean isOpen){
    if(w instanceof DisclosurePanel){
        ((DisclosurePanel)w).setOpen(isOpen);
    }

    if(w instanceof HasWidgets){
        for(Widget ch : ((HasWidgets)w)){
            openChildren(ch, isOpen);
        }
    }

    if(w instanceof HasOneWidget){
        openChildren(((HasOneWidget)w).getWidget(), isOpen);
    }
}
于 2012-11-07T02:26:13.557 回答