如何在GWT TabPanel中获取Tab的名称

时间:2010-06-25 12:22:02

标签: gwt

我有一个标签面板,我可以动态添加标签。

在给定的点上它看起来像:

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

我想检查Tab是否已经存在。如果它存在,我应该得到它的索引。如果它不存在,我应该得到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

但是,我无法找到检索Text的方法。任何想法如何实现这种行为。

提前致谢。

2 个答案:

答案 0 :(得分: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 :(得分:1)

我认为您可能正在寻找TabBar.getTabHTML(int index)。

但是,我通常会做一些像Chris建议的事情,但是为标签本身创建一个数据对象

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类,你应该看看它们。