Java Vaadin:如何在TabSheet中迭代选项卡?

Java Vaadin:如何在TabSheet中迭代选项卡?,java,user-interface,vaadin,Java,User Interface,Vaadin,在Vaadin中,假设我必须根据选项卡的名称在选项卡表中找到一个选项卡 如何迭代选项卡工作表中的选项卡以完成此操作?()您可以通过以下方式迭代选项卡并通过选项卡标题找到它们: Iterator<Component> i = tabs.getComponentIterator(); while (i.hasNext()) { Component c = (Component) i.next(); Tab tab = tabs.getTab(c); if ("so

在Vaadin中,假设我必须根据选项卡的名称在选项卡表中找到一个选项卡


如何迭代选项卡工作表中的选项卡以完成此操作?

()

您可以通过以下方式迭代选项卡并通过选项卡标题找到它们:

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
    }
}
Iterator i=tabs.getComponentIterator();
while(i.hasNext()){
组件c=(组件)i.next();
Tab-Tab=tabs.getTab(c);
if(“some_caption”.equals(tab.getCaption())){
//找到了
}
}

不推荐使用Vaadin 7.x中的
getComponentInterator()
。所以@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!!!
    }
}
甚至在Java 8风格中:

tabSheet.iterator().forEachRemaining(component -> {
    if ("some".equals(tabSheet.getTab(component).getCaption())) {
        // got it!!!
    }
});

请让我知道我的实现是否正确:
TabSheet MyTabSheet=new TabSheet();迭代器TabIterator=MainTabSheet.getComponentIterator()
;在选项卡上迭代的后续代码是:
while(TabIterator.hasNext())
您提到的变量
Tabs
是什么类型的?我使用了以下方法,
TabSheet MyTabSheet=new TabSheet();迭代器TabIterator=MyTabSheet.getComponentIterator()时,我遇到了堆空间错误。这是一个tabsheet,如:tabsheet tabs=new tabsheet();上面的代码没有遇到任何堆问题。我看到堆问题的原因可能是,一旦找到该选项卡,我必须在该选项卡下添加一个新的选项卡。好的,这会弹出:
javax.servlet.ServletException:java.lang.ClassCastException:java.util.Collections$UnmodifiableCollection$1不能强制转换为com.vaadin.ui.Component
Ok,问题可能是在迭代时修改选项卡内容。你可以通过添加一个占位符(例如CssLayout)作为选项卡内容并添加其他组件来避免这种情况。谢谢你的回复,我有点明白了。尽管如此,当我尝试将迭代器类型转换为组件时,还是遇到了ClassCastException<代码>组件MyComponent=(组件)MyTabIterator.next()这给了我一个ClassCastException。为什么会这样?对你有用吗?
tabSheet.iterator().forEachRemaining(component -> {
    if ("some".equals(tabSheet.getTab(component).getCaption())) {
        // got it!!!
    }
});