ValueChangeEvent没有收到我的复合单选按钮组?

时间:2014-01-18 17:01:18

标签: java javascript html dom gwt

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

我想构建自己的Radio Button Widget,它由以下代码表示。

如果我的多个小部件具有相同的名称,只有一个被选中,就像分组的普通单选按钮一样,我该如何实现?

public class MyRadioButton extends Composite implements HasText, HasName, HasValueChangeHandlers<Boolean>, HasValue<Boolean> {

    private FlowPanel picker;
    private boolean isChecked;

    public MyRadioButton() {
        picker = new FlowPanel();
        initWidget(picker);

        addValueChangeHandler(new ValueChangeHandler<Boolean>() {

                    @Override
                    public void onValueChange(ValueChangeEvent<Boolean> event) {
                        ValueChangeEvent.fire(MyRadioButton.this, isChecked);
                    }
        });


    }


    @Override
    public void setValue(Boolean value, boolean fireEvents) {
        ...
        if (fireEvents) {
            ValueChangeEvent.fire(MyRadioButton.this, value);
        }

    }



}

1 个答案:

答案 0 :(得分:0)

你解决了问题吗?如果不是这可以帮助

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);
}