Как добавить полосу прокрутки в макет 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 растет по мере необходимости.