2013-05-16 36 views
8

Tôi đang làm việc trên một dự án trong Vaadin 7. Trong đó tôi cần phân tích tất cả các thành phần trong Bố cục và tìm một thành phần tôi cần.Vaadin - Lặp lại các thành phần trong bố cục

enter image description here

Phía trên là đại diện hình ảnh bố cục của tôi.

Tôi đang tự động tạo bố cục dọc màu xanh lục bên trong bố cục dọc màu xanh dương. Vì tôi đang tạo chúng động, tôi không thể có bất kỳ ví dụ nào cho những thứ được tạo động đó. Nhưng, tôi có ID duy nhất cho tất cả các thành phần.

Bây giờ tôi cần tìm một Combobox bằng Id. Tôi donno làm thế nào để phân tích cú pháp vào combobox từ bố trí dọc màu xanh.

Tất cả những gì tôi có là một ví dụ về bố cục dọc màu xanh dương và Id cho combobox. Và tôi cũng có thể có ID cho bố cục xanh và đỏ nếu cần.

tôi cần một cái gì đó như thế này, nhưng bị mắc kẹt ..

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 
     } 
    } 
+0

Nó sẽ là một ý tưởng để đặt tất cả các thành phần bạn sẽ cần sau này trong hashset và sử dụng ID làm khóa? –

Trả lời

11

Bạn phải kiểm tra thành phần đệ quy.

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"); 

Hy vọng nó giúp

+0

Người đàn ông tuyệt vời. Nó wroks hoàn hảo. – Gugan

0

Mặc dù sử dụng HasComponents.iterator() vẫn còn có thể com.vaadin.ui.AbstractComponentContainer thực hiện java.lang.Iterable<Component>, mà làm cho lặp một chút thoải mái hơn:

... 
    for (Component c : layout) { 
    if (id.equals(c.getId())) { 
     return c; 
    } 
    } 
    ... 
Các vấn đề liên quan