如何禁用Panel内部或Composite内部的所有小部件?

时间:2012-02-11 13:59:21

标签: java gwt

我有一个复合小部件,其中包含许多小部件(在HorizontalPanel内)。如何禁用HorizontalPanel内或此复合内的所有小部件?我在setEnabled()或面板

中找不到Composite方法

3 个答案:

答案 0 :(得分:3)

我确定你已经弄明白了,但如果其他人好奇,这将启用或禁用所有嵌套的FocusWidgets:

private void enableAllChildren(boolean enable, Widget widget)
{
    if (widget instanceof HasWidgets)
    {
        Iterator<Widget> iter = ((HasWidgets)widget).iterator();
        while (iter.hasNext())
        {
            Widget nextWidget = iter.next();
            enableAllChildren(enable, nextWidget);
            if (nextWidget instanceof FocusWidget)
            {
                ((FocusWidget)nextWidget).setEnabled(enable);
            }
        }
    }
}

答案 1 :(得分:2)

唯一的方法是递归获取面板的所有子项,并在每个小部件上调用setEnabled(false),扩展FocusWidget

答案 2 :(得分:1)

Composite类的getWidget()方法受到保护,因此您无法从外部包访问组合内部的小部件。因此,如果没有子类化Composite,你就无法获得Composite的子窗口小部件。