6

ラジオボタンの選択肢とラベルの投票を含む投票ウィジェットがあります

  1. ユーザーが選択肢を選択すると、選択肢の投票は +1 になります。
  2. 別の選択肢が選択された場合、古い選択肢の投票は -1 であり、新しい選択肢の投票は +1 である必要があります。

これには ValueChangeHandler を使用しました。

valueRadioButton.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
            @Override
            public void onValueChange(ValueChangeEvent<Boolean> e) {
                if(e.getValue() == true)
                {
                    System.out.println("select");
                    votesPlusDelta(votesLabel, +1);
                }
                else
                {
                    System.out.println("deselect");
                    votesPlusDelta(votesLabel, -1);
                }
            }
        }); 

private void votesPlusDelta(Label votesLabel, int delta)
{
    int votes = Integer.parseInt(votesLabel.getText());
    votes = votes + delta;
    votesLabel.setText(votes+"");
}

ユーザーが新しい選択肢を選択すると、古い選択肢リスナーはelseステートメントにジャンプする必要がありますが、ジャンプしません(+1部分のみが機能します)。私は何をすべきか?

4

2 に答える 2

9

RadioButton javadocには、ラジオ ボタンがクリアされたときに ValueChangeEvent を受け取らないことが記載されています。残念ながら、これはすべての記帳を自分で行う必要があることを意味します。

GWT イシュー トラッカーで提案されているように、独自の RadioButtonGroup クラスを作成する代わりに、次のようなことを検討できます。

private int lastChoice = -1;
private Map<Integer, Integer> votes = new HashMap<Integer, Integer>();
// Make sure to initialize the map with whatever you need

次に、ラジオ ボタンを初期化すると、次のようになります。

List<RadioButton> allRadioButtons = new ArrayList<RadioButton>();

// Add all radio buttons to list here

for (RadioButton radioButton : allRadioButtons) {
    radioButton.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
            @Override
            public void onValueChange(ValueChangeEvent<Boolean> e) {
                updateVotes(allRadioButtons.indexOf(radioButton));
        });
}

updateVotes メソッドは次のようになります。

private void updateVotes(int choice) {
    if (votes.containsKey(lastChoice)) {
        votes.put(lastChoice, votes.get(lastChoice) - 1);
    }

    votes.put(choice, votes.get(choice) + 1);
    lastChoice = choice;

    // Update labels using the votes map here
}

あまりエレガントではありませんが、仕事をする必要があります。

于 2012-10-31T11:35:50.990 に答える
2

GWT issue trackerには、この特定の問題に関する未解決の欠陥があります。最後のコメントには提案があります。基本的には、すべてのラジオボタンに変更ハンドラを設定し、グループ化を自分で追跡する必要があるようです...

乾杯、

于 2012-10-31T08:45:15.477 に答える