1

多くの DisclosurePanel が別の内部にネストされています (またはネストされていない場合もあります)。「すべて展開」「すべて折りたたむ」ボタンを実装したい。そうするためのきれいな方法を提案してください。

注: GWT でのイベント処理について少し調べてみましたが、少し混乱しました。私の場合、カスタム イベントを使用できるかどうかわかりません。カスタム イベントとそのハンドラーを定義して addHandler() を実行できるようですが、ハンドラー インターフェイスを実装するクラスには、setOpen() プロパティを使用できるようにする DisclosurePanel のインスタンスがありません。開示パネルの。

4

1 に答える 1

2

これを行う 1 つの方法は、ウィジェット階層を内省することです。最上位の親開示パネルから始めて、すべての子ウィジェットを見て、それらが 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);
    }
}
于 2012-11-07T02:26:13.557 に答える