如何动态刷新Vaadin手风琴?

时间:2014-09-04 14:16:28

标签: java spring hibernate accordion vaadin

我对手风琴有点问题。当我尝试删除一个手风琴标签时,我找不到任何方法。有谁知道我怎么能这样做?

这是我的一些代码。

public ResponseUI(final Window mainWindow, boolean allowSave, final Context c) {
    InjectHelper.inject(this);
    buildMainLayout();
    setCompositionRoot(mainLayout);

    // TODO add user code here
    //TODO: add responses to accordion

    List<Templates> templatesReenvia = templateBusinessManager.getAllTemplatesResposta();        
    boolean bandera = true;
    for(Templates tmpl : templatesReenvia) {
        accordion_respostes.addTab(new PlantillaView(mainWindow, panel_1, c, tmpl), tmpl.getSubject());
    }
    panel_1.addComponent(new ResponseForm(mainWindow,allowSave));

    panel_respostes.setScrollable(true);    
    button_1.addListener(new Button.ClickListener() {
        public void buttonClick(ClickEvent event) {    
            final Window dialog = new Window("Edició de plantilla");
            dialog.setModal(true);
            mainWindow.addWindow(dialog);
            dialog.addComponent(new PlantillaForm(mainWindow, c, false));
            dialog.setWidth("85%");
        }
    });
}

templateBusinessManager0我有CRUD方法,所以我只需要知道如何在其中一种方法出现时刷新手风琴。希望有人有更好的解决方案。

4 个答案:

答案 0 :(得分:0)

您使用removeComponent删除或使用replaceComponent替换,就像在任何其他组件容器中一样。如果您的组件无法自行更改其状态,则必须将它们交换出来。

答案 1 :(得分:0)

此示例应用程序在单击按钮时将一个选项卡的内容替换为其他内容。另请注意,Accordion / TabSheet不会自动替换选项卡的元数据(例如标题),而是从旧选项卡的元数据中复制它。在此示例中,标题始终显示&#34; Tab 1 &#34;即使内容本身已被交换。

public class AccordionUI extends UI {

private Accordion accordion;
private Panel tab1, tab2, tab3;

@Override
protected void init(VaadinRequest request) {

    HorizontalLayout hl = new HorizontalLayout();
    setContent(hl);

    tab1 = new Panel("Tab 1");
    tab2 = new Panel("Tab 2");
    tab3 = new Panel("Tab 3");

    accordion = new Accordion(tab1, tab2);
    hl.addComponent(accordion);

    Button button = new Button("Replace");
    button.addClickListener(new ClickListener() {

        @Override
        public void buttonClick(ClickEvent event) {
            accordion.replaceComponent(tab1, tab3);
        }
    });
    hl.addComponent(button);
}

}

答案 2 :(得分:0)

Vaadin陈述(见https://vaadin.com/book/vaadin7/-/page/layout.accordion.html):您可以将一个手风琴与TabSheet完全相同。

如果您查看TabSheet文档,您会发现以下内容:

tabsheet.removeTab(tab);

而且:

tabsheet.addTab(myTab).setCaption("My Tab");

因此,您可以刷新标题,关闭选项卡或只使用replaceComponent()方法更改内部组件。

答案 3 :(得分:0)

如果您需要删除特定标签,可以使用removeTab(Tab tabComponent)   - 你可以通过getTab(component)得到制表符号(组件就是那个,你在调用addTab(Component newTabComponent)时使用的方法:o) (或直接方式replaceComponent(oldComponent, newComponent)也应该有效)

如果您需要删除所有符合标签,我使用accordionInstance.removeAllComponents(),但如果removeTabreplaceComponent很糟糕,那么还可以添加带有特定布局的标签,您在该布局上调用removeComponents()addComponent(newComponent):)