0

我已经构建了一个带有 SmartGWT TabSet 的 GUI,它带有可以动态添加和删除的选项卡。选项卡共享相同的画布,在每个选项卡选择时从选项卡移动到选项卡,如下所示:

myTabSet.addTabSelectedHandler(new TabSelectedHandler() {

    public void onTabSelected(TabSelectedEvent event) {
    [...]
    myTabs[myTabSet.getSelectedTabNumber()].setPane(myCanvas);

    // Then I fill the contained widgets with the tab-specific data

    }
}   

这有效,但是当我尝试删除标签时

myTabSet.removeTab(iToBeDeletedTab);

该选项卡已删除,但其余选项卡有一个空白窗格,我只能通过重新加载页面来取回内容。我发现我必须通过调用来防止窗格破坏:

myTabSet.setDestroyPanes(false);

myTabSet.updateTab(iToBeDeletedTab, null);                          
//called right before
myTabSet.removeTab(iToBeDeletedTab);                            

我知道画布/窗格仍然被破坏,但我不知道如何防止这种情况。有没有人有任何提示?谢谢!

4

3 回答 3

0

您的调用是正确的,但现在您得到的是与 TabSet 完全不关联且未绘制的窗格(检查开发人员控制台中的 Watch Tab,您会看到这一点)。现在,调用 updateTab(someOtherTab, pane) 将窗格连接到应该显示的其他选项卡之一。

于 2012-10-23T15:52:21.777 回答
0

好的,我已经进行了一些测试并得到了与您相同的结果,但是在我找到的 Javadoc 中使用以下代码取得了一些成功:1°):

***public void setPane(Canvas pane)
Specifies the pane associated with this tab. You can change the pane associated with a given tab after the TabSet has been created by calling TabSet.updateTab(int, com.smartgwt.client.widgets.Canvas)***

我尝试不将 tab1 的窗格设置为空,但它不起作用。我认为它可以以更好的方式安排,但无论如何重点是使用该updatePad方法

public static void testTabDelete(){ final Canvas theCanvas = new Canvas(); final TabSet theTabs = new TabSet(); theTabs.setWidth("80%"); theTabs.setHeight("80%"); 最终选项卡 tab1 = new Tab("Tab1"); 最终选项卡 tab2 = new Tab("Tab2"); 最终选项卡 tab3 = new Tab("Tab3"); IButton btn1 = new IButton("Btn1"); btn1.setLeft(10); btn1.setTop(100); btn1.setWidth(80);
theCanvas.addChild(btn1);

      IButton btn2 = new IButton("Delete");
      btn2.setLeft(100);
      btn2.setTop(100);
      btn2.setWidth(80);
      btn2.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() {

        @Override
        public void onClick(com.smartgwt.client.widgets.events.ClickEvent event) {

            theTabs.updateTab(0, null);
            theTabs.updateTab(1, theCanvas);                
            theTabs.selectTab(tab2);                
            theTabs.removeTab(tab1);                
        }
    });
      theCanvas.addChild(btn2);     

    theTabs.addTab(tab1);
    theTabs.addTab(tab2);
    theTabs.addTab(tab3);
    tab1.setPane(theCanvas);

    RootPanel.get("container").add(theTabs);        

}
于 2012-10-23T18:38:35.583 回答
0

您是否尝试在删除选项卡后调用 redraw() 方法?这通常对我使用 smartGWT 小部件加载/重新加载数据有帮助。

于 2012-10-23T09:28:00.927 回答