Java ValueChangeEvent未收到我的复合单选按钮组?

Java ValueChangeEvent未收到我的复合单选按钮组?,java,javascript,html,dom,gwt,Java,Javascript,Html,Dom,Gwt,当我使用两个同名单选按钮时,它们就在一个组中。如果一个被选中,另一个将被取消选中 我想构建我自己的单选按钮小部件,它由以下代码表示 如果我的多个小部件具有相同的名称,那么如何实现这一点?与分组的普通单选按钮一样,只选择一个小部件 你的问题解决了吗?如果不是这样,这可能会有所帮助 import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueC

当我使用两个同名单选按钮时,它们就在一个组中。如果一个被选中,另一个将被取消选中

我想构建我自己的单选按钮小部件,它由以下代码表示

如果我的多个小部件具有相同的名称,那么如何实现这一点?与分组的普通单选按钮一样,只选择一个小部件


你的问题解决了吗?如果不是这样,这可能会有所帮助

import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.RadioButton;

public class MyRadioButton extends Composite implements
        DeselectOtherRadioButtonsHandler {

    private RadioButton rb;

    private String radioButtonGroup;

    public MyRadioButton(String radioButtonGroup) {
        rb = new RadioButton("Foo Button");

        getEventBus().addHandler(DeselectOtherRadioButtonsEvent.getType(), this);

        rb.addValueChangeHandler(new ValueChangeHandler<Boolean>() {

            @Override
            public void onValueChange(ValueChangeEvent<Boolean> event) {
                if (event.getValue().booleanValue()) {
                    // deselect other in same group
                    getEventBus().fireEvent(new DeselectOtherRadioButtonsEvent(radioButtonGroup);
                }
            }
        });

    }

    @Override
    public void onDeselectOtherRadioButtons(DeselectOtherRadioButtonsEvent event) {
        // Same RadioButton Group?
        if (radioButtonGroup.equalsIgnoreCase(event.getRadioButtonGroup())) {
            rb.setValue(false);
        }
    }

}

class DeselectOtherRadioButtonsEvent extends
        GwtEvent<DeselectOtherRadioButtonsHandler> {

    private final static Type<DeselectOtherRadioButtonsHandler> TYPE = new Type<DeselectOtherRadioButtonsHandler>();

    private final String radioButtonGroup;

    public DeselectOtherRadioButtonsEvent(String radioButtonGroup) {
        this.radioButtonGroup = radioButtonGroup;
    }

    public String getRadioButtonGroup() {
        return radioButtonGroup;
    }

    @Override
    public Type<DeselectOtherRadioButtonsHandler> getAssociatedType() {
        return TYPE;
    }

    @Override
    protected void dispatch(DeselectOtherRadioButtonsHandler handler) {
        handler.onDeselectOtherRadioButtons(this);
    }

}

interface DeselectOtherRadioButtonsHandler extends EventHandler {
    void onDeselectOtherRadioButtons(DeselectOtherRadioButtonsEvent event);
}

我认为您需要一个组小部件,它包含您的旧值(上次选择的按钮的值),注册一个ClickEvent,并将onClick的opldValue与当前选择的收音机进行比较。如果值不同,则可以触发ValueChangeEvent。
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.RadioButton;

public class MyRadioButton extends Composite implements
        DeselectOtherRadioButtonsHandler {

    private RadioButton rb;

    private String radioButtonGroup;

    public MyRadioButton(String radioButtonGroup) {
        rb = new RadioButton("Foo Button");

        getEventBus().addHandler(DeselectOtherRadioButtonsEvent.getType(), this);

        rb.addValueChangeHandler(new ValueChangeHandler<Boolean>() {

            @Override
            public void onValueChange(ValueChangeEvent<Boolean> event) {
                if (event.getValue().booleanValue()) {
                    // deselect other in same group
                    getEventBus().fireEvent(new DeselectOtherRadioButtonsEvent(radioButtonGroup);
                }
            }
        });

    }

    @Override
    public void onDeselectOtherRadioButtons(DeselectOtherRadioButtonsEvent event) {
        // Same RadioButton Group?
        if (radioButtonGroup.equalsIgnoreCase(event.getRadioButtonGroup())) {
            rb.setValue(false);
        }
    }

}

class DeselectOtherRadioButtonsEvent extends
        GwtEvent<DeselectOtherRadioButtonsHandler> {

    private final static Type<DeselectOtherRadioButtonsHandler> TYPE = new Type<DeselectOtherRadioButtonsHandler>();

    private final String radioButtonGroup;

    public DeselectOtherRadioButtonsEvent(String radioButtonGroup) {
        this.radioButtonGroup = radioButtonGroup;
    }

    public String getRadioButtonGroup() {
        return radioButtonGroup;
    }

    @Override
    public Type<DeselectOtherRadioButtonsHandler> getAssociatedType() {
        return TYPE;
    }

    @Override
    protected void dispatch(DeselectOtherRadioButtonsHandler handler) {
        handler.onDeselectOtherRadioButtons(this);
    }

}

interface DeselectOtherRadioButtonsHandler extends EventHandler {
    void onDeselectOtherRadioButtons(DeselectOtherRadioButtonsEvent event);
}