2014-09-04 122 views
0

我手风琴有点问题。例如,当我尝试删除手风琴的一个选项卡时,我找不到任何方法来执行此操作。任何人都知道我可以做到这一点?如何动态刷新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方法,所以我只需要知道如何在这种方法中的一个发生刷新我的手风琴。希望有人有更好的解决方案。

回答

0

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

+0

我需要刷新不删除:/ – GooDFighTy 2014-09-04 15:10:28

+0

删除+添加=刷新,因为它不是相同的对象 – 2014-09-04 16:58:24

+0

@GooDFighTy还有replaceComponent。你的第一句话提到“删除”,所以我认为,这是你唯一的问题 – cfrick 2014-09-04 17:25:22

0

此示例应用程序在单击按钮时将一个选项卡的内容替换为其他内容。另请注意,Accordion/TabSheet不会自动替换选项卡的元数据(例如标题),而是从旧选项卡的元数据中复制。在这个例子中,即使内容本身被交换,标题也总是说“标签1”。

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

}

0

Vaadin状态(见https://vaadin.com/book/vaadin7/-/page/layout.accordion.html):您可以使用相同手风琴的标签页。

如果你看看标签页的文档,你会发现这样的事情:

tabsheet.removeTab(tab); 

这:

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

所以你可以刷新标题,关闭该标签或只是使用replaceComponent()方法更改组件内部。

+0

手风琴也mehod'addTab(组件,标题)':) – xxxvodnikxxx 2015-08-06 06:58:01

0

如果需要删除特定的标签,你可以使用removeTab(Tab tabComponent) - 标签PARAM你能由getTab(component)得到(组件是一个,你使用它,而调用addTab(Component newTabComponent)方法:O) (或直接的方式replaceComponent(oldComponent, newComponent)应作品也)

如果您需要删除所有协议选项卡,我使用accordionInstance.removeAllComponents(),但如果removeTabreplaceComponent很烂,这里还有way-你可以用一些特定的布局添加标签和你打电话removeComponents()addComponent(newComponent)上布局:)