Существует ли `AcceptsOneWidget`, который также` ProvidesResze` (кроме `ScrollPanel`)? - PullRequest
3 голосов
/ 28 февраля 2011

У меня есть композит, который расширяет ResizeComposite и имеет DockLayoutPanel в качестве корня. Я могу вставить его прямо в RootLayoutPanel, и он работает, потому что DockLayoutPanel ProvidesResize.

Однако я хочу использовать средства MVP в GWT 2.2, и RootLayoutPanel нельзя передать на ActivityManager#setDiplay(AcceptsOneWidget) (так как это контейнер с несколькими виджетами).

На первый взгляд, ScrollPanel, кажется, отвечает двойному требованию реализации AcceptsOneWidget и одновременно ProvidesResize и RequiresResize.

Но я обнаружил, что, когда я помещаю свой виджет в ScrollPanel, он имеет «нулевой размер», и мне приходится измерять его вручную, чтобы увидеть его, и у меня возникают проблемы, зная, какой размер дать это. Я бы предпочел панель, которая не обязательно прокручивалась.

Ответы [ 2 ]

3 голосов
/ 02 марта 2011

В GWT 2.3 будет SimpleLayoutPanel , описываемый как:

A simple panel that {@link ProvidesResize} to its one child.

2 голосов
/ 28 февраля 2011

Вы можете добавить ProvidesResize к любому виджету, реализовав его самостоятельно, что относительно просто - вы просто передаете все уведомления об изменении размера, которые вы получаете каждому дочернему элементу, который RequiresResize.

В качестве альтернативы, если вы просто хотите, чтобы ваша панель занимала все доступное пространство, вы можете попробовать установить ширину и высоту для ScrollPanel до "100%".

Наконец, вот моя реализация LayoutPanel, которая AcceptsOneWidget:

public class PanelForView extends LayoutPanel implements AcceptsOneWidget
{
    IsWidget myWidget = null;

    @Override
    public void setWidget(IsWidget w)
    {
        if (myWidget != w)
        {
            if (myWidget != null)
            {
                remove(myWidget);
            }

            if (w != null)
            {
                add(w);
            }

            myWidget = w;
        }
    }

}

Я использую это в своем коммерческом приложении в течение нескольких месяцев без каких-либо проблем, и его легко поменять местами. Не стесняйтесь использовать этот код самостоятельно.

...