2009-08-31 2 views
0

У меня есть один горизонтальный менеджер полей. Я добавляю некоторые компоненты во время выполнения. Я хочу знать, какие компоненты я разместил в горизонтальном полемане. Может кто-нибудь дать мне представление о том, как найти, какие компоненты присутствуют в горизонтальном полевом менеджере. приветствует, s.kumaran.Blackberry - получить все дочерние поля управления

ответ

4

+1 Jan, но как насчет внутренних менеджеров? Некоторая рекурсия сделает это.

class Scr extends MainScreen implements FieldChangeListener { 
    HorizontalFieldManager mMainPanel; 
    VerticalFieldManager mVerticalPanel; 
    ButtonField mPrintButton; 

    public Scr() { 
     add(new LabelField("Title", FIELD_HCENTER)); 
     mMainPanel = new HorizontalFieldManager(); 
     add(mMainPanel); 
     mVerticalPanel = new VerticalFieldManager(); 
     mMainPanel.add(mVerticalPanel); 
     for (int i = 0; i < 5; i++) { 
      HorizontalFieldManager hfm = new HorizontalFieldManager(); 
      hfm.add(new LabelField("Label " + i, FIELD_LEFT)); 
      hfm.add(new BasicEditField(FIELD_RIGHT)); 
      mVerticalPanel.add(hfm); 
     } 
     mPrintButton = new ButtonField("Print Console All Fields", 
       ButtonField.CONSUME_CLICK | FIELD_HCENTER); 
     mPrintButton.setChangeListener(this); 
     add(mPrintButton); 
    } 

    private Field[] getAllFields(Manager manager) { 
     int cnt = manager.getFieldCount(); 
     Field[] result = new Field[cnt]; 

     for (int i = 0; i < cnt; i++) { 
      Field field = manager.getField(i); 
      result[i] = field; 

      if (field instanceof Manager) { 
       Field[] childFields = getAllFields((Manager) field); 
       result = appendArray(result, childFields); 
      } 
     } 
     return result; 
    } 

    private Field[] appendArray(Field[] target, Field[] source) { 
     for (int i = 0; i < source.length; i++) { 
      Arrays.add(target, source[i]); 
     } 
     return target; 
    } 

    public void fieldChanged(Field field, int context) { 
     if (mPrintButton == field) { 
      Field[] fields = getAllFields(getMainManager()); 
      for (int i = 0; i < fields.length; i++) { 
       System.out.print("\nN " + i + "; Class: " 
         + fields[i].getClass().getName()); 
      } 
     } 
    } 
} 
1

Что-то, как это должно работать:

public Field[] getFieldsOfManager(Manager manager) { 
    Field[] fields = new Field[manager.getFieldCount()]; 
    for(int i = 0; i < manager.getFieldCount(); i++) 
    { 
     fields[i] = manager.getField(i);   
    } 
    return fields; 
} 
Смежные вопросы