Нет вертикальной прокрутки в браузере
Я разрабатываю приложение Vaadin и испытываю чрезвычайные трудности с получением некоторых аспектов макета, как я хочу. Основная проблема сейчас заключается в том, что я не могу получить вертикальную прокрутку в моем макете независимо от того, насколько велик размер содержимого или насколько мало окно браузера..
Я прочитал по этому вопросу, я знаю, что hLayout и vLayout не поддерживают полосы прокрутки, но панель делает. Я пробовал в разных комбинациях, чтобы заставить его работать, но я удалось создать только горизонтальную полосу прокрутки, но не вертикальную.
другая проблема заключается в том, что я создаю приложение внутри существующего "шаблона", предоставленного компанией. Этот шаблон содержит нижний колонтитул, содержащий некоторую информацию об авторских правах. Этот нижний колонтитул, похоже, не занимает никакого места в окне браузера в отношении содержимого, которое я добавляю, что вызывает при просмотре на меньших экранах горизонтальную полосу прокрутки, чтобы появиться " под " Нижним колонтитулом, не работает... Я приведу часть кода, как это выглядит сейчас.
public class InventorySimCardTable extends M2MViewBase { //M2MViewBase extends VerticalLayout
    private final SPanel mainContent = Cf.panel("");
    private final SPanel tabPanel = Cf.panel("");
    private final SVerticalLayout tabcontent = Cf.vLayout();
    protected InventoryFilterPanel inventoryFilterPanel;
    @Override
    protected void initComponent() {
        setSizeFull();
        tabPanel.setSizeFull();
        tabPanel.getContent().setSizeUndefined();
        Table simCardTable = new Table();
        simCardTable.setWidth("1898px");
        simCardTable.setPageLength(15);
        tableContainer.setSizeUndefined();
        tableContainer.addComponent(simCardTable);
        mainContent.setWidth("99%");
        mainContent.setHeight("100%");
        mainContent.setContent(tableContainer);
        mainContent.setScrollable(true);
        centeringlayout.setSizeFull();
        centeringlayout.addComponent(mainContent);
        centeringlayout.setComponentAlignment(mainContent, Alignment.MIDDLE_CENTER);
        tabPanel.addComponent(centeringlayout);
        addComponent(tabPanel);
    }
}
Я хотел бы знать, видит ли кто-нибудь очевидные ошибки в моем коде. И если кто-нибудь знает, какое свойство я могу установить на нижнем колонтитуле CSS, чтобы оно занимало место в представлении содержимого, чтобы горизонтальная прокрутка не появлялась под ним. Спасибо!
7 ответов
что я сделал, чтобы решить эту проблему, это структурировать код следующим образом. Это создаст вертикальную и горизонтальную полосу прокрутки для панели, содержащей компонент фильтра и таблицу. Надеюсь, это может помочь кому-то с подобной проблемой.
@Override
    protected void initComponent() {
        super.initComponent();
        if(!tableCreated) {
            createSimCardsTable();
            tableCreated = true;
        }
        mainWindow = this.getWindow();
        Panel basePanel = new Panel("");
        basePanel.addComponent(inventoryFilterPanel);
        AbstractComponent separatorLine = Cf.horizontalLine(); //Of no signficance
        separatorLine.addStyleName("m2m-horizontal-line-list-separator");
        separatorLine.setWidth("99%");
        basePanel.addComponent(separatorLine);
        basePanel.addComponent(simCardTable);
        basePanel.setSizeFull();
        basePanel.getContent().setSizeUndefined(); // <-- This is the important part
        addComponent(basePanel);
        setExpandRatio(basePanel, 1);
    }
все компоненты Vaadin имеют размер по умолчанию не определен, поэтому обычно нет необходимости вызывать метод setSizeUndefined(). Также нет необходимости звонить setScrollable(true), потому что он включает только программную возможность прокрутки.
когда я пытался понять смысл прокрутки внешнего вида, я написал простой скелет макета. Попробуйте это как содержимое главного окна:
import com.vaadin.ui.HorizontalSplitPanel;
import com.vaadin.ui.Label;
import com.vaadin.ui.Panel;
import com.vaadin.ui.VerticalLayout;
public class Skeleton extends VerticalLayout {
public Skeleton() {
    setSizeFull();
    addComponent(new Label("Header component"));
    HorizontalSplitPanel splitPanel = new HorizontalSplitPanel();
    Panel leftComponent = new Panel();
    Panel rightComponent = new Panel();
    splitPanel.setFirstComponent(leftComponent);
    splitPanel.setSecondComponent(rightComponent);
    for (int i = 0 ; i < 200 ; i ++) {
        leftComponent.addComponent(new Label("left"));
        rightComponent.addComponent(new Label("right"));
    }
    leftComponent.setSizeFull();
    rightComponent.setSizeFull();
    addComponent(splitPanel);
    setExpandRatio(splitPanel, 1);
    addComponent(new Label("Footer component"));
}
}
вы должны увидеть полосы прокрутки внутри вложенных панелей. Но если ... --3--> удаляется от Skeleton макет, то он не ограничен по размеру (по умолчанию) и растет вниз - тогда появляется только полоса прокрутки всего окна.
прежде всего попробуйте сделать вашу панель прокручиваемой, вызвав метод setScrollable (true), но это не сработает, если вы установите пользовательский макет с setSizeFull () в качестве нового макета этой панели.
Если вы точно знаете, что приложение будет открыто в устройстве с небольшим разрешением экрана, вы можете просто установить для своего "основного"/"основного" макета некоторую фиксированную ширину и высоту или добавить стиль CSS с параметрами, такими как min-width: {some value} px, min-height: {some value} px.
основываясь на этом посте, я добавил vertical.setSizeUndefined(); и начал видеть вертикальные полосы прокрутки.
setMainWindow(new Window(title ));
vertical.setSizeFull();
vertical.setHeight("100%");
toolbar = createToolbar();
vertical.addComponent(toolbar);
vertical.setExpandRatio(toolbar, 0.03f);
Component tree = buildTree();
vertical.addComponent(tree);
vertical.setExpandRatio(tree, 0.97f);
vertical.setSizeUndefined();
getMainWindow().setContent(vertical);>
всегда используйте CustomLayout. Это быстрее, эффективнее и легко управляя html и css, вы можете получить графически согласованный результат