Vaadin 8 View: нет горизонтальной полосы прокрутки при изменении размера окна - PullRequest
1 голос
/ 07 апреля 2019

У меня есть приложение Vaadin 8 с несколькими представлениями.

public class ViewName extends Panel implements View {

В качестве основного макета на панели используется VerticalLayout.

public ViewName() {
    setSizeFull();
    VerticalLayout mainLayout = new VerticalLayout();
    setContent(mainLayout);

Тогда у меня есть много разных макетов (HorizontalLayout, GridLayout) или таких компонентов, как Label, добавляемых в качестве компонентов к mainLayout. Для HorizontalLayouts я часто делаю следующее, чтобы использовать полную ширину экрана:

hLayout.setWidth("100%");

У меня много иконок, сеток и т. Д. Все в порядке, пока я не изменяю размер окна. Когда я изменяю размер окна до небольшого размера, я получаю беспорядок (значки, текст и т. Д. Друг на друге) и отсутствие горизонтальной полосы прокрутки. (Однако сетки получают горизонтальные полосы прокрутки.) Я пробовал много вещей, чтобы это исправить. Если я добавлю

mainLayout.setSizeFull();

или

mainLayout.setWidth("100%");

У меня уже беспорядок на большом экране. Я также попробовал CSS для mainLayout, как описано здесь . Я получаю несколько полос прокрутки, но ни одного для самого окна!

Единственный компонент, который правильно изменяет размер, - это метка, добавленная в mainLayout, например ::1010.

Label title = new Label("Some text",ContentMode.HTML);
    title.setWidth(100, Unit.PERCENTAGE);
    mainLayout.addComponent(title);
    mainLayout.setComponentAlignment(title, Alignment.MIDDLE_CENTER);

Я также заметил, что что-то в GridLayout, кажется, остается на месте после изменения размера, но не видимо, так как у меня нет полосы прокрутки. Тем не менее, значки в HorizontalLayout попадают друг на друга.

Что не так? Пожалуйста, мне нужна общая инструкция о том, какой макет я должен использовать в качестве основного макета для моей панели просмотра, как определить размеры компонентов и как при необходимости получить ОДНУ горизонтальную полосу прокрутки для главного окна.

1 Ответ

2 голосов
/ 08 апреля 2019

Проблема в том, что вы устанавливаете ширину вашего mainLayout равной ширине вашего вида. Это означает, что ваша ширина mainLayouts никогда не будет больше ширины ваших просмотров. Поэтому полоса прокрутки не появится.

Согласно информации, которую вы разместили, изменение ширины mainLayouts на undefined должно решить проблему.

 mainLayout.setWidth("-1px");
...