【发布时间】:2011-09-10 16:07:25
【问题描述】:
在 Vaadin 中,假设我必须根据名称在 TabSheet 中找到一个 Tab。
如何遍历 Tabsheet 中的 Tabs 以完成此操作?
【问题讨论】:
标签: java user-interface vaadin
在 Vaadin 中,假设我必须根据名称在 TabSheet 中找到一个 Tab。
如何遍历 Tabsheet 中的 Tabs 以完成此操作?
【问题讨论】:
标签: java user-interface vaadin
在 Vaadin 7.x 中,getComponentIterator() 已弃用。所以@eeq 的答案已经过时了。
他的解决方案可能看起来像这样:
Iterator<Component> iterator = tabSheet.iterator();
while (iterator.hasNext()) {
Component component = iterator.next();
TabSheet.Tab tab = tabSheet.getTab(component);
if ("some tab caption".equals(tab.getCaption())) {
// Found it!!!
}
}
但由于 TabSheet 实现了java.lang.Iterable<Component>,它也可能看起来像这样:
for (Component component : tabSheet) {
TabSheet.Tab tab = tabSheet.getTab(component);
if ("some tab caption".equals(tab.getCaption())) {
// Found it!!!
}
}
甚至是 Java 8 风格:
tabSheet.iterator().forEachRemaining(component -> {
if ("some".equals(tabSheet.getTab(component).getCaption())) {
// got it!!!
}
});
【讨论】:
您可以通过以下方式迭代选项卡并通过选项卡标题找到它们:
Iterator<Component> i = tabs.getComponentIterator();
while (i.hasNext()) {
Component c = (Component) i.next();
Tab tab = tabs.getTab(c);
if ("some_caption".equals(tab.getCaption())) {
// found it
}
}
【讨论】:
tabs,它是什么类型的?我使用了以下方法,TabSheet MyTabSheet= new TabSheet(); Iterator<Component> TabIterator = MyTabSheet.getComponentIterator();,我遇到了堆空间错误。
javax.servlet.ServletException: java.lang.ClassCastException: java.util.Collections$UnmodifiableCollection$1 cannot be cast to com.vaadin.ui.Component
Component MyComponent = (Component) MyTabIterator.next(); 这给了我一个 ClassCastException。为什么这样?它对你有用吗?
【讨论】:
TabSheet MyTabSheet = new TabSheet(); Iterator<Component> TabIterator = MainTabSheet.getComponentIterator();并且后续遍历 Tabs 的代码是:while(TabIterator.hasNext())