在GWT中使用DisclosurePanel实现“展开/折叠全部”

时间:2012-11-06 04:29:44

标签: gwt

我有很多DisclosurePanel嵌套在另一个内(或者也可能不嵌套)。我想实现“全部展开”和“全部折叠”按钮。 请建议一个干净的方法。

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

1 个答案:

答案 0 :(得分:2)

这样做的一种方法是内省Widget层次结构。从最顶层的父公开面板开始,查看所有子窗口小部件,检查它们是否为DisclosurePanels,然后打开/关闭它们。如果有许多小部件,这可能对性能有害,但你可以尝试。

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

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);
    }
}