我有一个标签面板,我可以动态添加标签。
在给定的点上它看起来像:
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的方法。任何想法如何实现这种行为。
提前致谢。
答案 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类,你应该看看它们。