SmartGwt - 删除一个选项卡可清除画布

时间:2012-10-23 08:46:01

标签: gwt tabs smartgwt

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

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

    }
}   

这样可行,但是当我尝试使用

删除Tab时
myTabSet.removeTab(iToBeDeletedTab);

该标签已删除,但其余标签有一个空白窗格,我只能通过重新加载页面来获取内容。我发现我必须通过调用来阻止窗格销毁:

myTabSet.setDestroyPanes(false);

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

我知道画布/窗格仍然被破坏,但我无法弄清楚如何防止这种情况。 有人提示吗? 谢谢!

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您的通话是正确的,但现在您所拥有的是与TabSet完全无关联且未绘制的窗格(请查看开发者控制台中的“监视”选项卡,您将看到此内容)。现在,调用updateTab(someOtherTab,pane)将窗格连接到应该显示的其他选项卡之一。

答案 2 :(得分: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%”);         final Tab tab1 = new Tab(“Tab1”);         final Tab tab2 = new Tab(“Tab2”);         final Tab tab3 = new Tab(“Tab3”);         IButton btn1 =新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);        

}