【问题标题】:Vaadin: How to iterate over Tabs in a TabSheet?Vaadin:如何迭代 TabSheet 中的选项卡?
【发布时间】:2011-09-10 16:07:25
【问题描述】:

在 Vaadin 中,假设我必须根据名称在 TabSheet 中找到一个 Tab。

如何遍历 Tabsheet 中的 Tabs 以完成此操作?

【问题讨论】:

    标签: java user-interface vaadin


    【解决方案1】:

    在 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&lt;Component&gt;,它也可能看起来像这样:

    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!!!
        }
    });
    

    【讨论】:

      【解决方案2】:

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

      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&lt;Component&gt; TabIterator = MyTabSheet.getComponentIterator();,我遇到了堆空间错误。
      • 它是一个tabsheet,如:TabSheet tabs = new Tabsheet();上面的代码没有遇到任何堆问题。
      • 我可能会看到堆问题的原因是,一旦找到该选项卡,我必须在该选项卡下添加一个新的选项卡表。好的,弹出这个:javax.servlet.ServletException: java.lang.ClassCastException: java.util.Collections$UnmodifiableCollection$1 cannot be cast to com.vaadin.ui.Component
      • 好的,问题可能是在迭代 TabSheet 内容时对其进行了修改。您可以通过添加占位符(例如 CssLayout)作为选项卡内容并向其中添加其他组件来避免这种情况。
      • 感谢您的回复,我有点明白了。尽管如此,当我尝试将迭代器类型转换为组件时,我还是遇到了 ClassCastException。 Component MyComponent = (Component) MyTabIterator.next(); 这给了我一个 ClassCastException。为什么这样?它对你有用吗?
      【解决方案3】:

      【讨论】:

      • 如果我的实现是正确的,请告诉我:TabSheet MyTabSheet = new TabSheet(); Iterator&lt;Component&gt; TabIterator = MainTabSheet.getComponentIterator();并且后续遍历 Tabs 的代码是:while(TabIterator.hasNext())
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多