2010-06-25 61 views
1

我有一個可以動態添加製表符的選項卡面板。如何在GWT TabPanel中獲取製表符的名稱

在給定的點就可以像:

tabPanel.add(new HTML("Dashboard"), new Hyperlink("Dashboard", "dashboard"));  
tabPanel.add(new CashGameTabPage(this), new Hyperlink("Cash Games", "cash")); 
tabPanel.add(new TournamentTabPage(this), new Hyperlink("Tournament", "tournament")); 

我想檢查是否有標籤已經存在。如果存在,我應該得到它的索引。如果它不存在,我應該得到0。我想作爲一個功能如:

public static int getIndexIfAlreadyExists(DecoratedTabPanel tabPanel, String title) { 
    int tabcount = tabPanel.getTabBar().getTabCount();  
    for(int i = 0; i < tabcount;i++) {    
     if(/*TODO get a Tab Text */.equals(title)) 
      return i; 
    return 0; 
} 

我想獲得

getIndexIfAlreadyExists(tabPanel, "Dashboard") -> 0 
getIndexIfAlreadyExists(tabPanel, "Cash Games") -> 1 
getIndexIfAlreadyExists(tabPanel, "Tournament") -> 2 

但是我不設法找到檢索的方法文本。任何想法如何實現這種行爲。

在此先感謝。

+0

如果您有添加到選項卡面板的小工具,您可以通過迭代選項卡面板中的小工具並與您手頭的小工具進行比較來傳遞它們(而不是標題)以便於檢查。 – 2010-06-25 15:41:14

回答

1

TabPanel並沒有真正做到這一點。可能通過TabPanel.getTabBar().getTab(index)以某種方式獲得超鏈接小部件,但我不確定。

這大約是我會做什麼:

public class TabPanelModel { 

    private final List<String> titleList = new ArrayList<String>(); 
    private final TabPanel tabPanel; 

    public TabPanelModel(final TabPanel tabPanel) { 
     this.tabPanel = tabPanel; 
    } 

    public void addToPanel(Widget widget, final String linktext, final String targetHistoryToken) { 
     tabPanel.add(widget, new Hyperlink(linktext, targetHistoryToken)); 
     titleList.add(linktext); 
    } 

    /* similar for remove, ... */ 

    public int getIndexIfAlreadyExists(final String linktext) { 
     return titleList.indexOf(linktext) + 1; 
    } 

} 

該方法使用更多的內存量小,但我相信,這是更好反正有一個乾淨的模型這樣的信息。

1

我想你可能正在尋找TabBar.getTabHTML(int index)。

不過,我通常這樣做克里斯的建議,但創造的標籤本身

public interface Tab { 
    String getName(); // or Widget 
    Widget getContent(); 
} 

數據對象,並通過上的TabPanel包裝添加標籤:如果你

List<Tab> tabs; 

public void addTab(Tab tab) { 
    tabs.add(tab); 
    tabPanel.add(tab.getContent(), tab.getName); 
} 

public Tab getTab(int i) {...} 

而且不要使用新的LayoutPanel類,你應該給他們看看。