0

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

我将 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());

}

}

现在在表格中我有一个列表组..

对于复选框,我说当它被点击时,它将检查正确组的组列表,并在该组中找到正确的字段。然后我将此字段设置为启用/禁用...在编译级别这有效,但是当我单击复选框时,我得到该字段的空指针异常。所以我的组在我单击复选框时的字段为零

我应该怎么办?

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 回答