Java 是否禁用组合上的ClickEvent?

Java 是否禁用组合上的ClickEvent?,java,javascript,gwt,Java,Javascript,Gwt,我在GWT中实现了一个复合按钮,希望实现HasEnabled接口来启用/禁用此按钮上的单击事件。这就是我所做的: public class MyButton extends Composite implements HasText HasClickHandlers, HasEnabled { FocusPanel panel; boolean enabled; public MyButton() { panel = new FocusPanel(); labe

我在GWT中实现了一个复合按钮,希望实现HasEnabled接口来启用/禁用此按钮上的单击事件。这就是我所做的:

public class MyButton extends Composite implements HasText HasClickHandlers, HasEnabled {

FocusPanel panel;
boolean enabled;

public MyButton() {
        panel = new FocusPanel();
        label = new Label("Test");
        panel.add(label);
        initWidget(panel);
}




@Override
public HandlerRegistration addClickHandler(ClickHandler handler) {
    return panel.addClickHandler(handler);
}


@Override
public boolean isEnabled() {
    return enabled;
}


@Override
public void setEnabled(boolean enabled) {
    this.enabled = enabled;

}


}
启用设置为false时,如何禁用面板上的ClickHandler?

HandlerRegistration handlerRegistration = panel.addClickHandler(handler);
当您要禁用它时:

if (handlerRegistration != null) {
    handlerRegistration.removeHander();
}

最简单的方法是编写包装器单击处理程序,该处理程序仅在启用组件时执行“真实”单击处理程序:

@Override
public HandlerRegistration addClickHandler(final ClickHandler handler) {
    return panel.addClickHandler(new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
            if(enabled){
                handler.onClick(event);
            }
        }
    });
}

但是,当我想稍后启用单击处理程序而不重新设置它时,请重新添加它!panel.addClickHandler(handler);