Подтвердить что ты не робот

Создание жидкостной панели в GWT для заполнения страницы?

Я хочу, чтобы панель в 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);
    }

}

С предыдущим фрагментом кода ничего не отображается. Есть ли метод вызова, который мне не хватает?

Спасибо.


UPDATE 17.09.2008 в 20:15

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

ОБНОВЛЕНИЕ 18.09.2008 в 14:38

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

4b9b3361

Ответ 1

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);

Ответ 2

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

split.setWidth("100%");
split.setHeight("100%");

Ответ 6

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

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

Ответ 7

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

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

Ответ 8

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

panel.setWidth( "100%" );

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

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

Только это, больше ничего. Благодаря