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

时间:2015-08-28 12:41:09

标签: vaadin

如果我创建了导航器并在其中添加了addview:

n = new navigator(.....);

并制作两个视图,其中view2扩展了view1。

做另外的事情:

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

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

1 个答案:

答案 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);
    }
}

不幸的是,现在我无法测试任何代码,所以上面的代码只是想法。

你需要的是什么?或者我可能误解了你的问题?