2012-09-25 12 views
5

मैं एक सूची बॉक्स को लागू करने पर काम कर रहा हूं जिसे मैं सूची बॉक्स में चयन करते समय उपयोगकर्ता को सतर्क करने में सक्षम होना चाहता हूं। क्या सूची में किसी आइटम पर क्लिक करने वाले उपयोगकर्ता का जवाब देने का कोई तरीका है, और "changeEvent" से पहले चयन का जवाब देना है, इसलिए मैं बदलाव को रोकने से रोक सकता हूं। मैंजीडब्ल्यूटी - लिस्टबॉक्स, परिवर्तन का पूर्वावलोकन कैसे करें

Event.addNativePreviewHandler(new NativePreviewHandler() { 
    @Override 
    public void onPreviewNativeEvent(NativePreviewEvent event) { 
     System.out.println("EVENT: " + event.getTypeInt()); 
    } 
}); 

उपयोग करने की कोशिश की है, लेकिन यह कभी नहीं ListBox में एक विशिष्ट तत्व पर क्लिक करने के लिए प्रतिक्रिया करता है, यह केवल, शुरू में ListBox पर क्लिक करें जब आप ListBox ध्यान केंद्रित करने की प्रतिक्रिया करता है। मैं कुछ ऐसा करने में सक्षम होना चाहता हूं:

Event.addNativePreviewHandler(new NativePreviewHandler() { 
    @Override 
    public void onPreviewNativeEvent(NativePreviewEvent event) { 
     if(event is changeEvent && event source is listBox) { 
      if(do some check here) 
      event.stopPropagation(); 
     } 
    } 
}); 

किसी भी सुझाव की बहुत सराहना की जाएगी, धन्यवाद!

+0

@AndreiVolgin आपकी प्रतिक्रिया के लिए धन्यवाद। मैं उन्हें विकल्पों पर क्लिक करने की अनुमति देने में सक्षम होना चाहता हूं, और फिर उन्हें पॉपअप के साथ संकेत देना जारी रखने के लिए सहमत हूं, और फिर परिवर्तन को निष्पादित करना जारी रखना या पॉपअप के प्रति उनकी प्रतिक्रिया के आधार पर परिवर्तन को रद्द करना जारी रखना चाहता हूं। –

उत्तर

4

सभी को धन्यवाद। जब मैं सूची बॉक्स पर ध्यान केंद्रित करता हूं तो चयन की स्थिति को बचा रहा था। और इस इंडेक्स को सहेजना और इसे बदलना जब परिवर्तन Event केवल अनुमति के बाद अगले चयन में बदल जाता है।

@UiHandler("listBox") 
public void onListBoxFocus(FocusEvent event) { 
    this.saveListBoxSelection = listBox.getSelectedIndex(); 
} 

@UiHandler("listBox") 
public void onChange(ChangeEvent event) { 
    int newSelection = listBoxCompliant.getSelectedIndex(); 
    listBox.setSelectedIndex(this.saveListBoxSelection); 
    if(proceed with change) 
     listBox.setSelectedIndex(newSelection); 
    else 
     //cancel event 

यह एक यूबिन्डर का उपयोग करके किया जाता है, लेकिन यह घटनाओं को सीधे सूची बॉक्स में जोड़कर भी किया जा सकता है। टिप्पणियों के लिए फिर से धन्यवाद!

1

चेंजएवेंट जारी रखने की अनुमति देने में कोई हानि नहीं है। आप चेंजएवेंट हैंडलर में अपना तर्क जोड़ सकते हैं। यदि कोई उपयोगकर्ता आगे बढ़ने का निर्णय नहीं लेता है, तो आप बस चयन को पिछले एक पर वापस सेट करें या चयन हटा दें।

@Override 
onChange(ChangeEvent event) { 
    // ask user if he wants to continue 
    // if yes 
     doSomething(); 
    // if no 
     myList.setSelectedIndex(-1); 
} 
3

आप बस घटना को मार सकता है अगर आप इसे इलाज के लिए नहीं करना चाहती: आपके इनपुट के लिए

@Override 
onChange(ChangeEvent event) { 
    // ask user if he wants to continue 
    // if yes 
     doSomething(); 
    // if no 
     event.kill(); 
} 
+0

यदि आप घटना को मार देते हैं, तो क्या यह चयन वापस कर देगा? –

+0

@AndreiVolgin यदि आप वापस करना चाहते हैं, तो एक वेरिएबल जोड़ें जो प्रत्येक परिवर्तन पर चयन का मान रखेगा, और जब आप जारी नहीं रखना चाहते हैं, तो आप ईवेंट को मार दें और चयन को –

+0

@AdelBoutros में अंतिम मान पर रीसेट करें मैं एक फोकस घटना में मूल्य भंडारित कर दिया, और इसे परिवर्तन घटना में वापस स्विच कर दिया। मैंने घटना की हत्या का उपयोग नहीं किया, हालांकि, मैं इसे देख लूंगा, सुझावों के लिए धन्यवाद! –

संबंधित मुद्दे