Создание жидкостной панели в GWT для заполнения страницы? - PullRequest
18 голосов
/ 17 сентября 2008

Я бы хотел, чтобы панель в GWT заполняла страницу без необходимости устанавливать размер. Есть ли способ сделать это? В настоящее время у меня есть следующее:

public class Main  implements EntryPoint
{
    public void onModuleLoad()
    {
        HorizontalSplitPanel split = new HorizontalSplitPanel();
        //split.setSize("250px", "500px");
        split.setSplitPosition("30%");

        DecoratorPanel dp = new DecoratorPanel();
        dp.setWidget(split);

        RootPanel.get().add(dp);
    }

}

С предыдущим фрагментом кода ничего не появляется. Мне не хватает вызова метода?

Спасибо.


ОБНОВЛЕНИЕ 17 сентября 2008 года в 20: 15

Я поместил несколько кнопок (явно установил их размер) с каждой стороны, и это все еще не работает. Я действительно удивлен, что здесь нет класса FillLayout, метода setFillLayout, setDockStyle (DockStyle.Fill) или чего-то подобного. Может быть, это невозможно? Но, несмотря на то, что GWT настолько популярен, я бы подумал, что это возможно.

ОБНОВЛЕНИЕ 18 сентября 2008 года в 14: 38

Я попытался установить ширину и высоту RootPanel равными 100%, но это все равно не сработало. Спасибо за предложение, хотя, казалось, что это может сработать. Любые другие предложения ??

Ответы [ 8 ]

19 голосов
/ 06 июня 2009

Google ответил на основную часть вашего вопроса в одном из своих часто задаваемых вопросов: http://code.google.com/webtoolkit/doc/1.6/FAQ_UI.html#How_do_I_create_an_app_that_fills_the_page_vertically_when_the_b

Основной момент заключается в том, что вы не можете установить высоту на 100%, вы должны сделать что-то вроде этого:

final VerticalPanel vp = new VerticalPanel();
vp.add(mainPanel);
vp.setWidth("100%");
vp.setHeight(Window.getClientHeight() + "px");
Window.addResizeHandler(new ResizeHandler() {

  public void onResize(ResizeEvent event) {
    int height = event.getHeight();
    vp.setHeight(height + "px");
  }
});
RootPanel.get().add(vp);
13 голосов
/ 23 мая 2012

Ответ Бена очень хороший, но также устарел. Обработчик изменения размера был необходим в GWT 1.6, но сейчас мы находимся на уровне 2.4. Вы можете использовать DockLayoutPanel , чтобы ваш контент занимал страницу вертикально. См. пример почтового приложения , в котором используется эта панель.

0 голосов
/ 21 июля 2015

Для меня это не работает, если я просто установить ширину, как

panel.setWidth ( "100%");

Панель представляет собой VerticalPanel, который только что получил случайный размер, и я не знаю, откуда он. Но то, что прокомментировал @Ben Bederson, сработало очень хорошо после того, как я добавил строку:

panel.setWidth (Window.getClientWidth () + "px");

Только это, больше ничего. Спасибо

0 голосов
/ 19 января 2009

Проблема заключается в том, что ячейка DecoratorPanel middleCenter по умолчанию заполнится вашим содержимым, а SplitPanel не позволяет устанавливать размер стиля «100%». Чтобы сделать то, что вы хотите, установите соответствующий стиль таблицы на вашем CSS:

.gwt-DecoratorPanel .middleCenter { высота: 100%; ширина: 100%; }

0 голосов
/ 19 сентября 2008

Документация для DecoratorPanel гласит:

Если вы установите ширину или высоту DecoratorPanel, вам нужно установить высоту и ширину ячейки middleCenter на 100%, чтобы ячейка middleCenter занимала все доступное пространство. Если вы не установите ширину и высоту панели DecoratorPanel, она плотно обернет содержимое.

0 голосов
/ 19 сентября 2008

Панели автоматически меняют размеры до минимальной видимой ширины. Поэтому вы должны изменить размер каждой панели, которую вы добавляете в RootPanel, до 100%, включая вашу SplitPanel. Сам RootPanel не нуждается в изменении размера. Так что попробуйте:

split.setWidth("100%");
split.setHeight("100%");
0 голосов
/ 18 сентября 2008

Попробуйте добавить ширину и / или высоту корневой панели до 100%, прежде чем добавлять свой виджет.

0 голосов
/ 17 сентября 2008

Я думаю, вам нужно поместить что-то слева и / или справа от split (split.setLeftWidget (widget), split.setRightWidget (widget) ИЛИ split.add (widget), который добавится первым к влево, затем вправо), чтобы что-нибудь появилось.

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