Как отключить все виджеты внутри Panel или внутри Composite? - PullRequest
2 голосов
/ 11 февраля 2012

У меня есть составной виджет, который содержит много виджетов (внутри HorizontalPanel).Как отключить все виджеты внутри HorizontalPanel или внутри этого композита?Я не могу найти метод setEnabled() в Composite или панели

Ответы [ 3 ]

3 голосов
/ 11 декабря 2012

Я уверен, что вы уже поняли это, но если кому-то еще интересно, это включит или отключит все вложенные 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);
            }
        }
    }
}
2 голосов
/ 11 февраля 2012

Единственный способ сделать это - рекурсивно получить все дочерние элементы панели и вызвать setEnabled(false) для каждого виджета, который расширяет FocusWidget

1 голос
/ 07 июня 2013

Метод getWidget () класса Composite защищен, поэтому вы не можете получить доступ к виджетам внутри композита из внешних пакетов.Следовательно, вы не можете получить дочерние виджеты Composite без создания подкласса Composite.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...