0

動的に追加および削除できるタブを備えたSmartGWTTabSetを使用して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

タブを削除した後、redraw()メソッドを呼び出そうとしましたか?これは通常、smartGWTウィジェットを使用してデータをロード/リロードするときに役立ちます。

于 2012-10-23T09:28:00.927 に答える
0

呼び出しは正しいですが、TabSet から完全に関連付けられておらず、描画されていないペインが得られます (開発者コンソールの [ウォッチ] タブを確認すると、これが表示されます)。ここで updateTab(someOtherTab, pane) を呼び出して、ペインを表示すべき他のタブの 1 つに接続します。

于 2012-10-23T15:52:21.777 に答える
0

わかりました、私はいくつかのテストを行い、あなたと同じを得ましたが、次のコードでいくつかの成功を収めました: 1°) 私が見つけた Javadoc で:

***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 のペインを null に設定せずに試してみましたが、うまくいきませんでした。より良い方法で配置できると思いますが、とにかくupdatePadメソッドを使用することがポイントです

public static void testTabDelete(){ final Canvas theCanvas = new Canvas(); final TabSet theTabs = new TabSet(); theTabs.setWidth("80%"); theTabs.setHeight("80%"); 最終的なタブ tab1 = 新しいタブ("Tab1"); 最終的なタブ tab2 = 新しいタブ("Tab2"); 最終タブ tab3 = 新しいタブ("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 に答える