在vaadin的扩展视图中添加其他内容

在vaadin的扩展视图中添加其他内容,vaadin,Vaadin,如果我制作了navigator并在其中添加了视图: n = new navigator(.....); 并创建两个视图,其中view2扩展了view1 做另外一件事: n.addView("view1", View1.class); n.addView("view2", View2.class); 如何在view2中添加其他组件,如标签、表格或垂直布局等?答案在Vaadin Book中: 但我在这里也强调了一些代码部分: 导航设置 public class MyUI extends UI {

如果我制作了navigator并在其中添加了视图:

n = new navigator(.....);
并创建两个视图,其中view2扩展了view1

做另外一件事:

n.addView("view1", View1.class);
n.addView("view2", View2.class);

如何在view2中添加其他组件,如标签、表格或垂直布局等?

答案在Vaadin Book中: 但我在这里也强调了一些代码部分:

导航设置

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());
}
实现视图

“视图可以是实现视图界面的任何对象。”

代码来自瓦丁的书

请注意,该视图是常规类。它有一个特殊的方法
entry()
,在每个视图条目之后调用。您可以在类构造函数中创建的所有组件、布局等(例如,在上面的示例中:
addComponent(button)

如果您想导航到任何已注册的视图(通过调用方法
addView(“viewName”),…)
和视图名注册),只需调用
navigateTo(“viewName”)
。您可以通过两种方式获得导航器:

getUI().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);
    }
}
不幸的是,现在我不能测试任何代码,所以上面的代码只是一个想法


这就是你需要的吗?或者我误解了您的问题?

是的,这是可以理解的,但我将view2设置为类view1:)的扩展类。我试图在第二个视图(view2)中添加示例标签,它实际上扩展了view1之外的类。类似于:公共类view2扩展view1{……}Ok。抱歉,但我仍然认为您可以在
view2()
构造函数中执行此操作。但是,如果
view1
的所有内容都是私有的,这可能是不可能的(或非常困难的)。但是,如果您遵循Vaadin Book示例并使
view1
扩展布局(例如
VerticalLayout
),那么您甚至可以在
view2()
构造函数或
removeComponent(组件c)
中调用
removeAllComponents
。您仍然可以使
view1
protectedscope的某些组件保留在视图中,即使我们删除了(组件c)?实际上,我希望在页面的内容中添加一个或两个组件!我添加了一个非常简单的例子来说明我所说的。
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);
    }
}