2011-05-11 13 views
6

मेरे पास एक jList है जो अंतर्निहित सूची मॉडल में जोड़कर गतिशील रूप से आबादी वाला है। अब अगर मैं तीन तार जिसका मूल्य मुझे पता है और मैंसेटस्लेक्टेड वैल्यू का उपयोग करके जेएलिस्ट में चुने गए कई आइटम कैसे सेट करें?

for(i=0;i<3;i++){ 
    jList.setSelectedValue(obj[i],true);//true is for shouldScroll or not 
} 

करना केवल पिछले आइटम का चयन किया जाना प्रतीत होता है ... ऐसा नहीं किया जा सकता है और मैं अंतर्निहित मॉडल कैसे से चयन सेट करने के लिए है क्या मुझे इसके बारे में जाना चाहिए ???

इसके अलावा JList है चयन मोड कृपया ध्यान दें:

jList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); 

अग्रिम धन्यवाद

उत्तर

-2

हालांकि StanislasV answer पूरी तरह से वैध है, मैं एक से दूसरे चयन अंतराल जोड़ने से बचने के लिए पसंद करेंगे। इसके बजाय, आप इस तरह JList जुड़े ListSelectionModel#setSelectionInterval(int, int) विधि कॉल करने को प्राथमिकता देनी चाहिए:

jList.getSelectionModel().setSelectionInterval(0, 3) 

आप अपनी सूची में चयन संबंध तोड़ना होना चाहते हैं, तो आप इसके अलावा अपने स्वयं के ListSelectionModel लिखने के लिए होगा।

+0

-1 यह बस गलत है - addSelectionInterval _the_ विधि है .. अच्छी तरह से .. चयन में कुछ जोड़ना। सटीक परिणाम SelectionMode – kleopatra

+0

पर निर्भर करता है धन्यवाद! ListSelectionModel ने काम किया –

3
jList.addSelectionInterval(0,2); 
+1

+1 स्पॉट पर addSelectionInterval' साथ ', लेकिन इस क्रम में वास्तव में उपयोगी उत्तर होने के लिए, एक स्पष्टीकरण की आवश्यकता है। – mre

10

ध्यान दें कि सभी xxSelectedValue विधियां चयन के चारों ओर सुविधा रैपर विधियां हैं जो मॉडल (जो केवल इंडेक्स-आधारित चयन पहुंच का समर्थन करती है) जेएलिस्ट पर। एकाधिक चयन प्रति मान समर्थित नहीं है। यदि आप वास्तव में इसे चाहते हैं, तो आपको एक सुविधा विधि को स्वयं लागू करना होगा। मूल रूप से, आप मॉडल के तत्वों से अधिक पाश जब तक आप इसी सूचकांक खोजने के लिए और सूचकांक आधारित विधियों फोन होगा, कुछ की तरह:

public void setSelectedValues(JList list, Object... values) { 
    list.clearSelection(); 
    for (Object value : values) { 
     int index = getIndex(list.getModel(), value); 
     if (index >=0) { 
      list.addSelectionInterval(index, index); 
     } 
    } 
    list.ensureIndexIsVisible(list.getSelectedIndex()); 
} 

public int getIndex(ListModel model, Object value) { 
    if (value == null) return -1; 
    if (model instanceof DefaultListModel) { 
     return ((DefaultListModel) model).indexOf(value); 
    } 
    for (int i = 0; i < model.getSize(); i++) { 
     if (value.equals(model.getElementAt(i))) return i; 
    } 
    return -1; 
} 
+0

+1 'addSelectionInterval' चाल करता है। यह स्वीकार स्वीकार किया जाना चाहिए !!!! : डी – mre

+0

ध्यान रखें कि DefaultListModel.indexOf (मान) पहले से ही एक रैखिक खोज करता है, इसलिए यह संस्करण के लिए इंडेक्स का उपयोग कर समान है (वही दक्षता हालांकि अधिक पठनीय)। – PhoneixS

+0

@PhoneixS यह एक कार्यान्वयन विवरण है जिसे हम नहीं जानते :) – kleopatra

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