有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java向CustomComponent添加ValueChangeListener

我有一个自定义组件,希望向其中添加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 ->{...});

我已经看过其他的课程了,但是每门课都不一样


共 (1) 个答案

  1. # 1 楼答案

    您可以使用^{}。它已经从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);