0

実行時にUIコンポーネントを動的に生成する必要があります。コンポーネントを生成することはできますが、動的に生成されたフィールドに値を入力する方法が問題になりますか?

私はこのようなことをしています。

    final HorizontalFieldManager hfm = new HorizontalFieldManager();

    for (int i=0; i<5; i++)
    {
        hfm.add(new EditField());
    }

フィールドのタグを設定し、後でタグで制御を見つける方法はありますか?

4

4 に答える 4

3

Field.setCookie (Object)およびField.getCookie()を使用して、フィールドにCookieを設定および取得します。これを使用して、編集フィールドを希望どおりに一致させることができます。

于 2011-12-04T02:04:11.210 に答える
1
EditField[] ef = new EditField[size];//at global in class

//何かをする

VerticalFieldManager vfm = new VerticalFieldManager();
for(int i=0 ;i<size ;i++)
{
    HorizontalFieldManager hfm = new HorizontalFieldManager();
    ef[i] = new EditField();
    hfm.add(ef[i]);
    vfm.add(hfm);
}
add(vfm);

//UIの作成を完了

//EditFieldから値の取得を開始します

public void fieldChanged(Field field, int context) {
    super.fieldChanged(field, context);
    for(int i=0;i<size;i++)
    {
        if (field.equals(ef[i]) {
            system.out.println("Value from editfield :- " + ef[i].getText());
        }
    }
}
于 2011-12-03T15:50:36.813 に答える
1

私の知る限り、EditFieldに一意のIDを設定する方法はありません。たぶん、そのサブクラスを使用して、独自のIDメカニズムを実装できます。または、Horizo​​ntalFieldManagerはEditFieldしか保持していないため、位置ごとにフィールドを取得してEditFieldにキャストできます。このような:

Field f = hfm.getField(index);
EditField ef = (EditField)f;

アップデート:

public class MyEditField extends EditField {

private int _id;

public MyEditField(int id) {
    _id = id;
}

public int getID() {
    return _id;
}

}

class MyHfm extends HorizontalFieldManager {

    //This is a cache, which holds all EditFields.



private IntHashtable _editfields = new IntHashtable();

    public EditField getById(int id) {
        EditField ef = (EditField)_editfields.get(id);
        return ef;
}

    public void add(Field f) {
        super.add(f);
        if (f instanceof MyEditField) {
            _editfields.put(((MyEditField)f).getID(), f);
        }
    }

    public void delete(Field f) {
        super.delete(f);
        if (f instanceof MyEditField) {
            _editfields.remove(((MyEditField)f).getID());
        }
    }

}

そして、あなたはこのようにすることができます:

    MyHfm hfm = new MyHfm();
    hfm.add(new MyEditField(0));
    hfm.add(new MyEditField(1));
    //get the field with id
    EditField f = hfm.getById(1);

他にもいくつかの削除/追加メソッドがあります。それらの内部のキャッシュを処理することを忘れないでください。

于 2011-12-03T16:42:53.713 に答える
1

あなたはこのように試すことができます

Editfield ef = new Editfield();
add(ef);
ef.setcookie("Here you can set object with specific value");
ef.setchangelistner(this);

およびフィールド変更リスタナ機能

public void fieldChanged(Field field, int context) {
    object ob = field.getcookie();
    // compare this ob and give appropriate actionss
}
于 2011-12-04T04:50:27.400 に答える