我已经使用带有标签的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);
我知道画布/窗格仍然被破坏,但我无法弄清楚如何防止这种情况。 有人提示吗? 谢谢!
答案 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);
}