2012-10-23 31 views
0

我已經構建了一個帶有可動態添加和刪除的選項卡的SmartGWT TabSet的GUI。 的標籤,分享其從標籤移到選項卡每個選項卡選擇這樣相同的畫布:SmartGwt - 刪除一個選項卡會清除畫布

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);        

據我所知,帆布/窗格仍然摧毀,但我無法弄清楚如何防止這種情況。 有沒有人有任何提示? 謝謝!

+0

我沒聽懂什麼,當你刪除一個標籤,你這樣做:當你表示刪除 –

+0

後顯示移除標籤前的標籤你怎麼設置的選項卡,窗格更改選定的選項卡與'myTabSet.selectTab標籤0(0);' 然後我設置窗格 'myTabs [myTabSet.getSelectedTabNumber()] setPane(myCanvas);' – moncino07

+0

我會做一個嘗試今晚 –

回答

0

您是否在移除標籤後嘗試調用redraw()方法?這通常幫助我在使用smartGWT小部件加載/重新加載數據時。

+0

是的,我都嘗試標籤集.redraw()和Canvas.redraw(),但沒有運氣... – moncino07

0

你的調用是正確的,但現在你所得到的是完全與TabSet無關的窗格,並且沒有繪製(檢查開發人員控制檯中的Watch選項卡,你會看到這個)。現在,調用updateTab(someOtherTab,窗格)將窗格連接到應該顯示的其他選項卡之一。

+0

謝謝,這是有道理的。現在,我這樣做,但我收到此錯誤信息: _A的小工具,有一個現有的父控件可能不會被添加到列表分離] _ 我現在我打電話是: 'toBeDeletedTab.setPane(NULL); ' \t \t \t \t \t \t \t'myTabSet.updateTab(iToBeDeletedTab,NULL);' 'myTabSet.selectTab(0);' 'myTabSet.updateTab(0,myCanvas);' 隨着鉻顯影劑工具我可以看到,我的所有小部件都在頁面中,但它們在面板之外的某處丟失。我看不出如何將它們鏈接回標籤畫布... – moncino07

+0

正如另一張海報中提到的那樣,這個工程很有效,所以這個問題很可能是其他*代碼。確保你正在調用draw()而不是RootPanel.add(),並且你可能會導致核心GWT不必要地被捲入。此外,不要在第二次調用updateTab()之前調用selectTab()(但這只是性能調整,而不是修復)。 –

+0

好的,謝謝比爾,我會深入研究並讓你知道我的發現。 – moncino07

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)*** 

我嘗試沒有設置爲null tab1的窗格,它不起作用。 我認爲這可能被安排在更好的方式,但無論如何點是使用updatePad方法

公共靜態無效testTabDelete(){ 最終帆布theCanvas =新的Canvas(); final TabSet theTabs = new TabSet(); theTabs.setWidth(「80%」); theTabs.setHeight(「80%」); 最終選項卡tab1 =新選項卡(「Tab1」); 最終選項卡tab2 =新選項卡(「Tab2」); 最終標籤tab3 =新標籤(「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);   

} 
+0

謝謝,我試過了,但是現在我收到一條錯誤消息,說有一個現有的父窗口小部件的窗口小部件可能不會添加到detach list_中。 使用Chrome開發人員工具,我可以看到我的所有小部件都在頁面中,但它們在主面板之外的某處丟失。它絕對看起來,畫布沒有附加到標籤集... – moncino07

+0

您可以詳細說明哪個小工具 –

+0

我有一個複雜的垂直和水平面板包含按鈕,listgrids,標籤和圖像的架構。另外我有一個包含JS圖表的HTML div。我嘗試了所有「updatetab」組合來解除綁定到另一個選項卡上的畫布,但當我調用「removetab」時,該窗格保持空白。 – moncino07