首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向CustomComponent添加ValueChangeListener

向CustomComponent添加ValueChangeListener
EN

Stack Overflow用户
提问于 2017-07-21 01:23:52
回答 1查看 913关注 0票数 1

我有一个自定义组件,并且想要向它添加一个ValueChangeListener。但我对注册方法有个问题。

这是我的自定义组件。

代码语言:javascript
复制
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“。但是我想像这样添加监听器。

代码语言:javascript
复制
MyCustomComp myCustomComp = new MyCustomComp();
myCustomComp.addValueChangeEvent(event ->{...});

我已经在其他类中看过了,但每个类都是不同的。

EN

回答 1

Stack Overflow用户

发布于 2017-07-22 02:06:37

您可以使用CustomField。它已经从HasValue实现了addValueChangeEvent,你只需要提供方法来设置和获取值。只需记住使用setValue方法设置您的值,否则将不会触发触发的值更改事件。

示例:

代码语言:javascript
复制
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;
    }

}

和用法:

代码语言:javascript
复制
Label currentTime = new Label();
currentTime.setCaption("Current time:");
addComponent(currentTime);

CustomComp customComp = new CustomComp();
customComp.addValueChangeListener(event -> {
    currentTime.setValue(customComp.getValue());
});
addComponent(customComp);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45221354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档