我有一个自定义组件,并且想要向它添加一个ValueChangeListener。但我对注册方法有个问题。
这是我的自定义组件。
public class CustomComp extends CssLayout implements HasValue<HashMap<String, Boolean>>{
private String value;
@Override
public void setValue(String value) {
// TODO Auto-generated method stub
this.value = value;
}
@Override
public String getValue() {
// TODO Auto-generated method stub
return value;
}
@Override
public Registration addValueChangeListener(com.vaadin.data.HasValue.ValueChangeListener<String> listener) {
// TODO Auto-generated method stub
System.out.println("Value Changed");
return null;
}
@Override
public void setRequiredIndicatorVisible(boolean requiredIndicatorVisible) {
// TODO Auto-generated method stub
}
@Override
public boolean isRequiredIndicatorVisible() {
// TODO Auto-generated method stub
return false;
}
@Override
public void setReadOnly(boolean readOnly) {
// TODO Auto-generated method stub
}
@Override
public boolean isReadOnly() {
// TODO Auto-generated method stub
return false;
}
}我想为我的组件创建一个对象,并像这样添加一个ValueChangeEvent,但我认为我必须更改addValueChangeListener,但我不知道具体如何更改。我知道调用该方法是因为执行了sysout "Value changed“。但是我想像这样添加监听器。
MyCustomComp myCustomComp = new MyCustomComp();
myCustomComp.addValueChangeEvent(event ->{...});我已经在其他类中看过了,但每个类都是不同的。
发布于 2017-07-22 02:06:37
您可以使用CustomField。它已经从HasValue实现了addValueChangeEvent,你只需要提供方法来设置和获取值。只需记住使用setValue方法设置您的值,否则将不会触发触发的值更改事件。
示例:
class CustomComp extends CustomField<String> {
private String value;
@Override
public String getValue() {
return value;
}
@Override
protected void doSetValue(String value) {
this.value = value;
}
@Override
protected Component initContent() {
Button updateCurrentTimeBtn = new Button("Update current time");
updateCurrentTimeBtn.addClickListener(event -> {
setValue(String.valueOf(System.currentTimeMillis()));
});
return updateCurrentTimeBtn;
}
}和用法:
Label currentTime = new Label();
currentTime.setCaption("Current time:");
addComponent(currentTime);
CustomComp customComp = new CustomComp();
customComp.addValueChangeListener(event -> {
currentTime.setValue(customComp.getValue());
});
addComponent(customComp);https://stackoverflow.com/questions/45221354
复制相似问题