如何根据vaadin中的操作重新加载或刷新选项卡的内容

时间:2013-03-13 06:26:25

标签: java tabs actionlistener vaadin

加载应用程序时,将形成并显示选项卡的内容。稍后,可以通过其他操作更改选项卡的内容。我想在每个动作后显示更新的内容。每次单击选项卡表时,都应刷新/更新内容。但我失败了。

    //the content of the tab from the "reprintsTab" class
    //in the "reprintsTab" it query data from database and print out
    //later I update the data in the database from somewhere else, and I want the tab shows the new content
    //I want to click the tab sheet to reload the "reprintTab" class and print out the new content

    //here is what I did:

    public TabSheet sheet;

    //add tab and add the content from "reprintTab" into this tab
    sheet.addTab(new reprintsTab());

    //add the listener 
    sheet.addListener(new TabSheet.SelectedTabChangeListener() {

        @Override
        public void selectedTabChange(SelectedTabChangeEvent event) {

        //I know it does not work, because it only reload the class. but not put the content under the tab I want
        new reprintsTab();

        }
    });

我该怎么办?请帮助我,谢谢。

1 个答案:

答案 0 :(得分:3)

您可以使用TabSheet.replaceComponent方法执行此操作:

//Field to store current component
private reprintsTab currentComponent; 

//during initialization
currentComponent = new reprintsTab();
sheet.addTab(currentComponent);

sheet.addListener(new TabSheet.SelectedTabChangeListener() {
    @Override
    public void selectedTabChange(SelectedTabChangeEvent event) {
        reprintsTab newComponent = new reprintsTab();
        sheet.replaceComponent(currentComponent, newComponent);
        currentComponent = newComponent;
    }
});

此外,您可能只想在显示时重新加载此标签:

sheet.addListener(new TabSheet.SelectedTabChangeListener() {
        @Override
        public void selectedTabChange(SelectedTabChangeEvent event) {
            if (event.getTabSheet().getSelectedTab() == currentComponent) {
                //here goes the code
            }
        }
});

这应该对你有用,但我建议采用更简洁的方法:实现reprintsTab作为组件的容器,创建方法reloadbuildInterface方法来刷新其状态,所以你可以打电话:

currentComponent.reload();

何时需要更新界面。

另外,我希望reprintsTab只是一个示例名称,以小写字母开头的java类名称看起来很难看。