在 vaadin 的扩展视图中添加其他内容
Add additional content in extended view in vaadin
如果我制作了导航器并在其中添加视图:
n = new navigator(.....);
并制作两个视图,其中 view2 扩展了 view1。
然后做另一件事:
n.addView("view1", View1.class);
n.addView("view2", View2.class);
如何在 view2 中添加其他组件,如标签、表格或垂直布局等?
答案在 Vaadin 书中:
https://vaadin.com/book/vaadin7/-/page/advanced.navigator.html
但我也在这里强调了一些代码部分:
设置导航
public class MyUI extends UI {
@Override
protected void init(VaadinRequest request) {
// Create a navigator to control the views
navigator = new Navigator(this, this);
// Create and register the views
navigator.addView("", new StartView());
navigator.addView(MAINVIEW, new MainView());
}
实现视图
"Views can be any objects that implement the View interface."
public class StartView extends VerticalLayout implements View {
public StartView() {
setSizeFull();
Button button = new Button("Go to Main View",
new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
navigator.navigateTo(MAINVIEW);
}
});
addComponent(button);
setComponentAlignment(button, Alignment.MIDDLE_CENTER);
}
@Override
public void enter(ViewChangeEvent event) {
Notification.show("Welcome to the Animal Farm");
}
}
代码来自Vaadin Book。
请注意视图是常规的 class。它有特殊的方法 entry()
,在每个视图条目之后调用。您可以在 class 构造函数中创建所有组件、布局等(例如上面的示例:addComponent(button)
)。
如果您想导航到任何已注册的视图(通过调用方法 addView("viewName", ...)
和视图名称进行注册),您只需调用 navigateTo("viewName")
。导航器有两种获取方式:
getUI().getNavigator().navigateTo("viewName");
或
UI.getCurrent().getNavigator().navigateTo("viewName");
我希望这是可以理解的。
编辑:
考虑一个简单的例子:
public class View1 extends VerticalLayout implements View {
protected Label hello = new Label("Hello");
private Button button = new Button("Click me");
public View1() {
addComponent(hello);
addComponent(button);
}
public Button getButton() {
return button;
}
}
public class View2 extends View1 {
private Button button2 = new Button("Don't click me");
public View2() {
hello.setValue("Hello world");
getButton().setIcon(...);
addComponent(button2);
}
}
不幸的是,现在我无法测试任何代码,所以上面的代码只是想法。
所以这是你需要的吗?还是我误解了你的问题?
如果我制作了导航器并在其中添加视图:
n = new navigator(.....);
并制作两个视图,其中 view2 扩展了 view1。
然后做另一件事:
n.addView("view1", View1.class);
n.addView("view2", View2.class);
如何在 view2 中添加其他组件,如标签、表格或垂直布局等?
答案在 Vaadin 书中: https://vaadin.com/book/vaadin7/-/page/advanced.navigator.html 但我也在这里强调了一些代码部分:
设置导航
public class MyUI extends UI {
@Override
protected void init(VaadinRequest request) {
// Create a navigator to control the views
navigator = new Navigator(this, this);
// Create and register the views
navigator.addView("", new StartView());
navigator.addView(MAINVIEW, new MainView());
}
实现视图
"Views can be any objects that implement the View interface."
public class StartView extends VerticalLayout implements View {
public StartView() {
setSizeFull();
Button button = new Button("Go to Main View",
new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
navigator.navigateTo(MAINVIEW);
}
});
addComponent(button);
setComponentAlignment(button, Alignment.MIDDLE_CENTER);
}
@Override
public void enter(ViewChangeEvent event) {
Notification.show("Welcome to the Animal Farm");
}
}
代码来自Vaadin Book。
请注意视图是常规的 class。它有特殊的方法 entry()
,在每个视图条目之后调用。您可以在 class 构造函数中创建所有组件、布局等(例如上面的示例:addComponent(button)
)。
如果您想导航到任何已注册的视图(通过调用方法 addView("viewName", ...)
和视图名称进行注册),您只需调用 navigateTo("viewName")
。导航器有两种获取方式:
getUI().getNavigator().navigateTo("viewName");
或
UI.getCurrent().getNavigator().navigateTo("viewName");
我希望这是可以理解的。
编辑:
考虑一个简单的例子:
public class View1 extends VerticalLayout implements View {
protected Label hello = new Label("Hello");
private Button button = new Button("Click me");
public View1() {
addComponent(hello);
addComponent(button);
}
public Button getButton() {
return button;
}
}
public class View2 extends View1 {
private Button button2 = new Button("Don't click me");
public View2() {
hello.setValue("Hello world");
getButton().setIcon(...);
addComponent(button2);
}
}
不幸的是,现在我无法测试任何代码,所以上面的代码只是想法。
所以这是你需要的吗?还是我误解了你的问题?