2014-09-04 2 views
0

У меня проблема с аккордеоном. Когда я пытаюсь, например, удалить одну вкладку аккордеона, я не нахожу никакого способа сделать это. Кто-нибудь знает, как я могу это сделать?Как обновить аккордеон Ваадин динамически?

Вот некоторые из моих кодов.

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

+0

Удалить + Добавить = обновить, так как это не тот же объект –

+0

@GooDFighTy есть replaceComponent. в вашем первом предложении упоминается «удалить», поэтому я подумал, что это была ваша единственная проблема. – cfrick

0

Это пример приложения заменяет содержимое одной вкладки другим контентом при нажатии кнопки. Также не следует, чтобы Accordion/TabSheet не заменил метаданные (например, подпись) на вкладке автоматически, но копировал их из метаданных старой вкладки. В этом примере заголовок всегда говорит «Tab 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.

Если вы посмотрите на документацию Tabsheet вы найдете что-то вроде этого:

tabsheet.removeTab(tab); 

И это:

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

Таким образом, вы можете обновить заголовок, закрыть вкладку или просто измените компонент внутри с помощью метода replaceComponent().

+0

Аккордеон также использовал mehod 'addTab (Component, caption)' :) – xxxvodnikxxx

0

Если вам нужно удалить определенную вкладку, вы можете использовать removeTab(Tab tabComponent) - вкладка параметров вы можете получить по getTab(component) (компонент является то, что один, который вы используете, в то время как вызовы addTab(Component newTabComponent) метод: о) (или прямой путь replaceComponent(oldComponent, newComponent) должен работает также)

Если вам нужно удалить все вкладки ACCORD, я использую accordionInstance.removeAllComponents(), но если removeTab или replaceComponent отстой, есть также ПУТЬ вы можете добавить вкладку с некоторой конкретной компоновкой, и вы называете removeComponents() и addComponent(newComponent) на этом макете)

Смежные вопросы