2010-06-25 108 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类,你应该给他们看看。