vaadin:如何在attachfield方法中启用字段?

时间:2012-06-22 09:50:21

标签: vaadin valuechangelistener

我有一个Vaadin表单,我重写了attachField方法。现在假设我有一个checkBox,一个文本字段和另一个TextField,我只希望当复选框为true时启用textField。

我将2个文本字段存储在Group类中:

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

import java.util.HashMap; import java.util.Map;

import 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。 所以我的组在点击复选框

时没有字段

我该怎么办?

1 个答案:

答案 0 :(得分: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());
    }
});