8

Vaadin 7 でプロジェクトに取り組んでいます。その中で、レイアウト内のすべてのコンポーネントを解析し、必要なコンポーネントを見つける必要があります。

ここに画像の説明を入力

上記は私のレイアウトの図式表現です。

青色の垂直レイアウト内に緑色の垂直レイアウトを動的に作成しています。私はそれらを動的に作成しているので、それらの動的に作成されたもののインスタンスを持つことはできません。しかし、私はすべてのコンポーネントに一意の ID を持っています。

次に、ID を使用してコンボボックスを見つける必要があります。青色の垂直レイアウトからコンボボックスに解析する方法がわかりません。

私が持っているのは、青色の垂直レイアウトのインスタンスとコンボボックスの ID だけです。また、必要に応じて、緑と赤のレイアウトの ID も取得できます。

私はこのようなものが必要ですが、立ち往生..

Iterator<Component> iterate = blueMainLayout.iterator();
Combobox cb;
while (iterate.hasNext()) {
Component c = (Component) iterate.next();
cb = (Combobox) blueMainLayout.....;
        if (cb.getId().equals(something.getId())) {
            // do my job
        }
    }
4

2 に答える 2

11

コンポーネントを再帰的にチェックする必要があります。

class FindComponent {
    public Component findById(HasComponents root, String id) {
        System.out.println("findById called on " + root);

        Iterator<Component> iterate = root.iterator();
        while (iterate.hasNext()) {
            Component c = iterate.next();
            if (id.equals(c.getId())) {
                return c;
            }
            if (c instanceof HasComponents) {
                Component cc = findById((HasComponents) c, id);
                if (cc != null)
                    return cc;
            }
        }

        return null;
    }
}

FindComponent fc = new FindComponent();
Component myComponent = fc.findById(blueMainLayout, "azerty");

それが役に立てば幸い

于 2013-05-16T14:02:55.537 に答える
2

implementsを使用することHasComponents.iterator()はまだ可能ですが、これにより反復が少し快適になります。com.vaadin.ui.AbstractComponentContainerjava.lang.Iterable<Component>

  ...
  for ( Component c : layout ) {
    if ( id.equals( c.getId() ) ) {
      return c;
    }
  }
  ...  
于 2015-06-23T21:58:47.483 に答える