Я столкнулся с проблемой перекрытия в моем проекте при попытке изменить размер браузера. Я пробовал так много разных вариантов, чтобы заставить его работать, но результат все равно неприемлем.
A, B и C содержатся в VerticalLayout - я назову его root.
- Корень находится внутри HorizontalLayout - содержимого
UI
. - A - простой компонент.
- B расширяет VerticalLayout, который содержит 2 HorizontalLayout с внутри.
- C - это всего лишь один компонент - Grid.
Теперь, когда я пытаюсь изменить размер своего браузера (как показывает стрелка), C начинает красть место для других компонентов.
Я хотел бы добиться того, чтобы моя сетка (C) не соответствовала моему браузеру. Он не должен двигаться, а просто скрываться, как показано ниже (зеленый цвет показывает фактически видимую часть):
/*ROOT class that extends VerticalLayout*/
private void init()
{
super.setSizeFull();
addA();
addB();
addC();
}
private void addA()
{
Label header = new Label();
super.addComponent(header);
super.setComponentAlignment(header, Alignment.MIDDLE_CENTER);
}
private void addB()
{
layoutB.setSizeFull();
layoutB.setWidth("92%");
super.addComponentsAndExpand(layoutB);
super.setExpandRatio(layoutB, 0.3f);
super.setComponentAlignment(layoutB, Alignment.MIDDLE_CENTER);
}
private void addC()
{
grid.setSizeFull();
grid.setColumnReorderingAllowed(true);
grid.setWidth("92%");
super.addComponentsAndExpand(grid);
super.setExpandRatio(grid, 0.6f);
super.setComponentAlignment(grid, Alignment.BOTTOM_CENTER);
}
Как видите, C добавляется так же, как B, но перемещается только C. Заранее благодарю за любую помощь!
Я использую Vaadin 8.
@Редактировать:
@SpringUI(path = "/ui")
public class MyUI extends UI {
@Override
protected void init(VaadinRequest request)
{
Workspace workspace = new Workspace();
HorizontalLayout root = new HorizontalLayout();
root.setSizeFull();
root.addComponentsAndExpand(workspace);
setContent(root);
}
public class Workspace extends Panel
{
public Workspace()
{
init();
}
private void init()
{
setSizeFull();
addStyleName(ValoTheme.PANEL_BORDERLESS);
VerticalLayout layout = new VerticalLayout();
// by default width 100% and height undefined in Vaadin 8
setContent(layout);
// component A
Label label = new Label("Test1");
layout.addComponent(label);
// component B
HorizontalLayout bar = new HorizontalLayout();
bar.addComponents(new Label("Label 1"), new Label("Label 2"));
layout.addComponent(bar);
// component C
Grid<MyBean> grid = new Grid<>(MyBean.class);
grid.setCaption("My Grid:");
grid.setHeight("1000px");
//grid.setHeightByRows(50); // same as fixed height
List<MyBean> items = new LinkedList<>();
IntStream.range(1, 100).forEach(i -> items.add(new MyBean("Item " + i)));
grid.setItems(items);
layout.addComponent(grid);
}
}
public static class MyBean {
private String name;
public MyBean(String name) { this.name = name; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
}
VerticalLayout
, если вы его не расширяете - просто создайте новый экземпляр и добавьте свои компоненты. Ваша проблема должна заключаться в полноразмерном вертикальном макете. Попробуйте обернуть его в полноразмерныйPanel
, затем сделайте вертикальный макет полной шириной и неопределенной высотой. Другие компоненты в вашем вертикальном макете также должны иметь неопределенную высоту. Это позволит ему расти в высоту по мере необходимости. - person Steffen Harbich   schedule 14.09.2017VerticalLayout
вPanel
. Я думаю, что эта проблема инициализируется на один уровень выше и зависит от содержимогоHybridMenu
- подробнее. ЕслиHybridMenu
высота содержимого не заполнена, он работает так, как я хочу, но тогда панель прокрутки не работает должным образом. - person Dawid Fieluba   schedule 14.09.2017HybridMenu
. Похоже, что уровень выше не может быть полностью увеличен. Теперь я вижу, что если иHybridLayout
контент, иHybridLayout
являются полноразмерными, возникает проблема перекрытия. Если только 1 из них полностью заполнен, это нормально, но тогда я не могу прокручивать. - person Dawid Fieluba   schedule 14.09.2017