【问题标题】:How to refresh a Vaadin accordion dynamically?如何动态刷新 Vaadin 手风琴?
【发布时间】:2014-09-04 14:16:27
【问题描述】:

我的手风琴有点问题。例如,当我尝试删除手风琴的一个标签时,我找不到任何方法。有人知道我该怎么做吗?

这是我的一些代码。

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 方法,所以我只需要知道当其中一种方法发生时如何刷新我的手风琴。希望有人有更好的解决方案。

【问题讨论】:

    标签: java spring hibernate accordion vaadin


    【解决方案1】:

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

    【讨论】:

    • 我需要刷新而不是删除:/
    • 删除 + 添加 = 刷新,因为它不是同一个对象
    • @GooDFightTy 还有replaceComponent。你的第一句话提到“删除”所以我想,这是你唯一的问题
    【解决方案2】:

    此示例应用在单击按钮时将一个选项卡的内容替换为其他内容。另请注意,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);
    }
    

    }

    【讨论】:

      【解决方案3】:

      Vaadin 声明(参见 https://vaadin.com/book/vaadin7/-/page/layout.accordion.html):您可以像使用 TabSheet 一样使用 Accordion。

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

      tabsheet.removeTab(tab);
      

      还有这个:

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

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

      【讨论】:

      • Accordion 也有方法 addTab(Component,caption) :)
      【解决方案4】:

      如果您需要删除特定标签,可以使用removeTab(Tab tabComponent) - 您可以通过getTab(component) 获得选项卡参数(组件就是那个,您在调用addTab(Component newTabComponent) 方法时使用它:o) (或直接方式replaceComponent(oldComponent, newComponent) 也应该有效)

      如果您需要删除所有雅阁标签,我正在使用 accordionInstance.removeAllComponents(),但如果 removeTabreplaceComponent 很糟糕,还有一种方法 - 您可以添加具有某些特定布局的标签,然后调用 removeComponents()addComponent(newComponent) 在那个布局上:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多