ValueChangeEvent не получил мою группу составных радиокнопок?

0

Когда я использую два переключателя с тем же именем, они находятся в группе. Если кто-то выбирается, другой выбирается без выбора.

Я хочу создать свой собственный виджет радио Button, который представлен следующим кодом.

Как я могу достичь этого, если более одного из моих виджетов имеют одно и то же имя, только один выбирается так же, как и для обычных переключателей, которые сгруппированы?

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

    }



}
  • 0
    Я думаю, что вам нужен групповой виджет, который содержит ваше oldValue (значение для последней выбранной кнопки), зарегистрируйте ClickEvent и сравните onClick opldValue с выбранным в данный момент радио. Если значения отличаются, вы можете запустить ValueChangeEvent.
Теги:
dom
gwt

1 ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню