Создание жидкостной панели в 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%, и это все еще не сработало. Спасибо за предложение, хотя похоже, что он, возможно, сработает. Любые другие предложения?
Ответы
Ответ 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" );
Только это, больше ничего. Благодаря