如果我创建了导航器并在其中添加了addview:
n = new navigator(.....);
并制作两个视图,其中view2扩展了view1。
做另外的事情:
n.addView("view1", View1.class);
n.addView("view2", View2.class);
如何在view2中添加其他组件,如标签,表格或垂直布局等?
答案 0 :(得分:0)
答案在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());
}
实施视图
"视图可以是实现View界面的任何对象。"
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。
请注意,View是常规类。它具有在每个视图条目之后调用的特殊方法entry()
。您可以在类构造函数中创建的所有组件,布局等(例如,在上面的示例中: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);
}
}
不幸的是,现在我无法测试任何代码,所以上面的代码只是想法。
你需要的是什么?或者我可能误解了你的问题?