作为您对“Hello World”示例应用程序的请求,我从https://vaadin.com/start下载了带有 Spring Starter 的 Project Starter,并将 Tatu 的解决方案与您的示例使用代码相结合。你可以在https://github.com/Peppe/absolute-layout-demo找到它。
您可以在终端/命令行中使用以下命令对其进行实时测试:
https://github.com/Peppe/absolute-layout-demo.git
cd absolute-layout-demo
mvn spring-boot:run
我创建了一个名为 AbsoluteLayout 的类,它的整体看起来像这样:
public class AbsoluteLayout extends Div {
public AbsoluteLayout() {
getElement().getStyle().set("position", "relative");
}
public void add(Component component, int top, int left) {
add(component);
component.getElement().getStyle().set("position", "absolute");
component.getElement().getStyle().set("top", top + "px");
component.getElement().getStyle().set("left", left + "px");
}
}
与 Tatu 所说的相比,我所做的唯一改变是给出相对于父布局的位置。这使得添加到布局的子元素的位置相对于布局,而不是主体(或 DOM 结构中的父位置相对)。否则,组件将位于顶部:50 像素,左侧:浏览器角落的 50 像素。
然后使用类如下所示:
@HtmlImport("styles/shared-styles.html")
@Route
public class MainView extends VerticalLayout {
public MainView() {
setClassName("main-layout");
//Just to add some content on the page to test relative position
for (int i = 0; i<5; i++){
add(new Div(new Text("Hello")));
}
// A 400x250 pixels size layout
AbsoluteLayout layout = new AbsoluteLayout();
layout.setWidth("400px");
layout.setHeight("250px");
// A component with coordinates for its top-left corner
TextField text = new TextField("Somewhere someplace");
layout.add(text, 50, 50);
add(layout);
}
}
我在布局前加了几行文字来添加几行文字,只是为了测试一下上面提到的position:relative。
希望这会有所帮助并让您走上正确的道路。正如您所注意到的,这个“AbsoluteLayout”实际上并没有任何代码——它只是一个 div。如果您想将一个元素放置到相对位置,您可以对应用程序中的任何布局执行相同的技巧。