实施";“全部展开/折叠”;使用GWT中的披露面板

实施";“全部展开/折叠”;使用GWT中的披露面板,gwt,Gwt,我有很多“披露”面板相互嵌套(也可能没有嵌套)。我想实现“全部展开”和“全部折叠”按钮。 请建议一种干净的方法 注意:我试着了解一下GWT中的事件处理,但有点困惑。我不确定是否可以将自定义事件用于我的案例。似乎我可以定义自定义事件及其处理程序并执行addHandler()之类的操作,但在将实现处理程序接口的类中,我没有允许我使用Exposure panel的setOpen()属性的DispositionPanel实例。这样做的一种方法是内省小部件层次结构。从最上面的父披露面板开始,查看所有子窗口

我有很多“披露”面板相互嵌套(也可能没有嵌套)。我想实现“全部展开”和“全部折叠”按钮。 请建议一种干净的方法


注意:我试着了解一下GWT中的事件处理,但有点困惑。我不确定是否可以将自定义事件用于我的案例。似乎我可以定义自定义事件及其处理程序并执行addHandler()之类的操作,但在将实现处理程序接口的类中,我没有允许我使用Exposure panel的setOpen()属性的DispositionPanel实例。

这样做的一种方法是内省小部件层次结构。从最上面的父披露面板开始,查看所有子窗口小部件,检查它们是否为披露面板,然后打开/关闭它们。如果有很多小部件,这可能会对性能造成潜在的不利影响,但无论如何,您都可以尝试

此代码尚未测试,但可能会执行您需要的操作:

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

你能提供一段代码吗?我没有专门为这个功能写下任何东西。由于我不知道如何进行(使用哪种机制),我没有取得任何进展。嗯,是的,这是有意义的。我试试看,然后回来!谢谢这起作用了。!谢谢。!但有一件事。。。最后一个带有HasOneWidget的if块对我来说没有意义,所以我尝试不使用它,没有它也可以正常工作。嘿,@peterd我只知道一个
HasOneWidget
的实现,那就是
SimplePanel
。您可能没有使用任何,但为了完整起见,我将其包括在内。我想让GWT添加一个“WidgetVisitor”,它将包含小部件树中的所有接口,但遗憾的是,它们还没有使用github,所以我不想费心贡献它……:(