【发布时间】:2017-09-07 13:08:40
【问题描述】:
在尝试调整浏览器大小时,我的项目面临重叠问题。 我尝试了很多不同的变化来使其工作,但结果仍然不可接受。
A、B 和 C 包含在 VerticalLayout 中 - 我将其称为 root。
-
根在 HorizontalLayout 内部 -
UI的内容。 - A 是简单的组件。
- B 正在扩展 VerticalLayout,其中包含 2 个 HorizontalLayouts。
- C 只是一个组件 - Grid。
现在,当我尝试调整浏览器的大小(如箭头所示)时,C 开始窃取其他组件的位置。
我想要达到的效果是我的 Grid (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中,然后将您的垂直布局设置为全宽和未定义的高度。垂直布局中的其他组件也应该具有未定义的高度。这将使它根据需要增加高度。 -
我试过这样做,但它的行为是相同的,无论我是否将我的
VerticalLayout包裹在Panel中。我认为这个问题是在上一级初始化的,取决于HybridMenu内容-more。如果HybridMenu内容高度未满,它可以按我的意愿工作,但滚动面板无法正常工作。 -
您是否在没有 HybridMenu 的情况下对其进行了测试?你能用面板发布完整的代码吗?
-
是的,首先它没有
HybridMenu。看起来上面的级别不能是全尺寸的。现在我看到了,如果HybridLayoutcontent 和HybridLayout都是全尺寸的 - 就会出现重叠问题。如果其中只有 1 个是 fullsized 就可以了,但是我不能滚动。
标签: java layout vaadin vaadin8