我有一个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。 所以我的组在点击复选框
时没有字段我该怎么办?
答案 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());
}
});