0

Vaadin フォームがあり、attachField メソッドをオーバーライドします。ここで、checkBox、textfield、および別の TextField があり、チェックボックスが true の場合にのみ textField を有効にしたいとします。

2 つのテキストフィールドを Group クラスに保存します。

package be.certipost.as2.gui.components.detail.custom;

java.util.HashMap をインポートします。java.util.Map をインポートします。

com.vaadin.ui.Field をインポートします。

パブリック クラス グループ {

private String id;
private Map<String, Field> fields;

public Group(String groupsId){
    this.id=groupsId;
    fields = new HashMap<String,Field>();
}

public Field findFieldById(String fieldId){
    System.out.println(fields.size());
    for( Map.Entry<String, Field> f: fields.entrySet()){
        if(f.getKey().equals(fieldId)){
            return f.getValue();
        }

    }

    return null;
}

public void setEnabled(Boolean enabled){
    for( Map.Entry<String, Field> f: fields.entrySet()){
        f.getValue().setEnabled(enabled);
    }
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public void addField(String fieldId, Field field) {
    fields.put(fieldId,field);
    System.out.println(fields.size());

}

}

今、フォームにリストグループがあります..

チェックボックスについては、クリックするとグループのリストで正しいグループがチェックされ、そのグループで正しいフィールドが見つかると言います。次に、このフィールドを有効/無効に設定します...コンパイルレベルではこれは機能しますが、チェックボックスをクリックすると、フィールドのnullpointerexceptionが発生します。したがって、チェックボックスをクリックした時点で、グループにはフィールドがありません

私は何をすべきか?

4

1 に答える 1

1

チェックボックスフィールドを即時に設定する必要があると思います

final Form form = new Form();
form.addItemProperty("checkbox", new ObjectProperty<Boolean>(Boolean.FALSE));
form.addItemProperty("txt1", new ObjectProperty<String>(""));
form.addItemProperty("txt2", new ObjectProperty<String>(""));
form.getField("txt1").setEnabled(Boolean.FALSE);
AbstractField field = (AbstractField) form.getField("checkbox");
field.setImmediate(true);
field.addListener(new ValueChangeListener() {
    @Override
    public void valueChange(ValueChangeEvent event) {
        form.getField("txt1").setEnabled((Boolean) event.getProperty().getValue());
    }
});
于 2012-06-29T08:40:14.217 に答える