Как добавить полосу прокрутки в макет Vaadin
Я нашел много вопросов, где люди спрашивают, как скрыть полосы прокрутки в макетах Vaadin, но моя проблема в том, что Vaadin не показывает мне никаких полос прокрутки. Например, у меня может быть этот код:
HorizontalLayout layout = new HorizontalLayout();
layout.setSizeUndefined(); // I also tried setSizeFull()
for(Integer i = 1; i <= 15; i++) {
layout.addComponent(new Button("Test button #" + i.toString());
}
но когда я запускаю этот код, кнопки на странице просто отключаются, когда окно браузера слишком мало, чтобы показать их все. Полосы прокрутки никогда не появятся.
Я также попытался создать панель, а затем добавить свой макет на эту панель. Я проверил оба ... --2--> а также panel.setContent(foo)
, и я попытался установить panel.setScrollable(true)
тоже. Безуспешно.
есть ли способ добавить полосу прокрутки в какой-то макет Vaadin? Я использую Vaadin 6.8.7. Заранее спасибо!
вот мой полный код:
private ComponentContainer openZoomifyLayout() {
Panel panel = new Panel();
Panel panel2 = new Panel();
middlePanel = new MiddlePanel();
VerticalLayout mw = new VerticalLayout();
mw.setSizeFull();
HorizontalLayout sp = new HorizontalLayout();
Panel photos = new Panel();
photos.setSizeUndefined();
mw.addComponent(panel);
mw.addComponent(panel2);
mw.addComponent(sp);
mw.setExpandRatio(sp, 99);
mw.setExpandRatio(panel, 0);
mw.setExpandRatio(panel2, 0);
panel2.addComponent(middlePanel);
mw.setComponentAlignment(panel, Alignment.TOP_CENTER);
mw.setComponentAlignment(panel2, Alignment.TOP_CENTER);
photos.setContent(table);
photos.setScrollable(true);
sp.addComponent(photos);
sp.addComponent(createMainDetail());
return mw;
}
этот метод используется в классе, который расширяет окно, и поэтому во время инициализации есть:setContent(openZoomifyLayout());
3 ответов
код sp
HorizontalLayout
и свой photos
Panel
нужно быть полным размером.
как вы можете прочитать в книге главу фреймворк Vaadin 6.6.1
нормально, если панель имеет неопределенный размер в направлении, как она имеет мимо по умолчанию вертикально, он будет соответствовать размеру содержимого и расти содержание растет. Однако, если он имеет фиксированный или процентный размер и его содержимое становится слишком большим, чтобы поместиться в области содержимого, полоса прокрутки появится для конкретное направление. Полосы прокрутки на панели обрабатывается изначально браузером с помощью свойства overflow: auto в стиль CSS.
вам понадобится панель. Вам также необходимо убедиться, что размер панели фиксированный, а не "естественный". Если его размер "естественный", панель будет увеличена до полного отображения ее содержимого. Размер по умолчанию для панелей является естественным, и именно поэтому вы не видите никаких полос прокрутки.
выполните следующие действия:
- внешний макет должен фиксированными или размер percentual в соответствующем направлении (например, VerticalLayout должен фиксированными или percentual высота)
- внутренний макет нуждается в неопределенном размере в этом направлении
- внешний макет нуждается в stylename
v-scrollable
например
public class SomeView extends CustomComponent implements View
{
this.addStyleName("v-scrollable");
this.setHeight("100%");
VerticalLayout content = new VerticalLayout();
// content has undefined height by default - just don't set one
setCompositionRoot(content);
...
}
это CustomComponent
показывать полосы прокрутки в то время как content
растет по мере необходимости.