2012-10-31 14 views
6

मैं RadioButton विकल्प और लेबल वोटGWT RadioButton बदलें हैंडलर

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

उपयोगकर्ता नए विकल्प का चयन करता है, पुराने पसंद श्रोता किसी और बयान में कूद जाना चाहिए, लेकिन यह नहीं होगा (केवल +1 हिस्सा काम करता है)। मुझे क्या करना चाहिए?

उत्तर

9

यह RadioButton javadoc में कहा गया है कि यदि आप एक प्राप्त नहीं होगी जब कोई रेडियो बटन साफ़ हो जाता है तो ValueChangeEvent। दुर्भाग्य से, इसका मतलब है कि आपको स्वयं को सभी बहीखाता करना होगा।

अपनी खुद की RadioButtonGroup वर्ग के रूप में GWT समस्या ट्रैकर पर सुझाव बनाने के लिए एक वैकल्पिक रूप में, आप कुछ इस तरह कर रही विचार कर सकते हैं:

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)); 
     }); 
} 
: फिर

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

जब आप रेडियो बटन को प्रारंभ

अद्यतनवॉट विधि तब कुछ ऐसा दिखता है:

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 
} 

बहुत सुरुचिपूर्ण नहीं है, लेकिन यह नौकरी करना चाहिए।

+0

धन्यवाद, मुझे लगता है कि यह काम करता है! ;) – united

2

GWT issue tracker पर इस विशिष्ट समस्या पर एक खुला दोष है। अंतिम टिप्पणी, एक सुझाव है मूल रूप से यह आप सभी radiobuttons पर changehandlers है और समूहों खुद का ट्रैक रखने की जरूरत है प्रकट होता है ...

चीयर्स,

+1

समस्या github में ले जाया गया था: https://github.com/gwtproject/gwt/issues/3467 –