簡體   English   中英

ValueChangeEvent沒有收到我的復合單選按鈕組?

[英]ValueChangeEvent not received my Composite Radio Button Group?

當我使用兩個具有相同名稱的單選按鈕時,它們將處於同一組。 如果一個被選中,則另一個未被選中。

我想構建自己的單選按鈕小部件,該代碼由以下代碼表示。

如果我的一個以上的小部件具有相同的名稱,那么如何才能實現這一點,就像分組的普通單選按鈕一樣,只能選擇一個?

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

    }



}

你解決了你的問題嗎? 如果沒有,這可能會有所幫助

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM