2012-03-01 15 views
5

पर ऑब्जेक्ट्स जोड़ना मेरे पास एक ऑब्जेक्ट है - ArrayList<User> users जिसमें कुछ उपयोगकर्ता ऑब्जेक्ट्स हैं।जेएलिस्ट

public class User 
{ 
    int id; 
    String name; 
    String location; 
} 

मैं एक JList में इस ArrayList डाल करने के लिए तो यह उन नामों को प्रदर्शित करेगा चाहते हैं -

John 
Mick 
Sam 
Joe 

--- और जब मैं एक उपयोगकर्ता नाम का चयन एक घटना निकाल दिया जाता है देता है कि मुझे कुछ प्रदर्शन उपयुक्त उपयोगकर्ता वस्तु का उपयोग कर कार्रवाई। तो कोई क्लिक करता है 'मिक' और मैं इस (स्यूडोकोड) जैसे कोड प्राप्त -

public jListClicked(User user) 
{ 
    int id = user.id; 
    String name = user.name; 
    String location = user.location; 

    updateDatabase(id, name, location); 
} 

मुझे लगता है कि यह एक JList का उपयोग कर संभव है ?? आखिरकार मैं कल्पना करता हूं कि जेएलआईस्ट घटक के लिए यही बनाया गया था। तो मैं एक जेएलिस्ट को ArrayList जैसे ऑब्जेक्ट को कैसे जोड़ूं ताकि मेरे पास उपर्युक्त कार्यक्षमता हो?

+2

यकीन है, सब कुछ स्विंग :-) के साथ संभव है सुनिश्चित करें कि आप पढ़ रहें और एक बुनियादी ट्यूटोरियल, f.i. समझते हैं:

आप कुछ करने के लिए इस तरह (विवरण के लिए इनलाइन टिप्पणी देखें) http://docs.oracle.com/javase/tutorial/uiswing/index.html – kleopatra

उत्तर

4

एक जेएलिस्ट अपने कन्स्ट्रक्टर में से एक ऑब्जेक्ट [] में ले जाता है। आप इसे अपने ArrayList से .toArray() फ़ंक्शन के साथ प्राप्त कर सकते हैं। मेरा मानना ​​है कि (मैं गलत हो सकता है ...) कि यदि आपका उपयोगकर्ता वर्ग toString() विधि को ओवरराइड करता है, तो जब यह आपकी ऑब्जेक्ट प्रदर्शित करता है तो जेएलिस्ट इसका उपयोग करेगा।

public class User 
{ 
    int id; 
    String name; 
    String location; 

    public String toString() { 
     return name; 
    } 
} 

मैं जावा दस्तावेज़ों में जेएलिस्ट के लिए प्रलेखन पढ़ने की सिफारिश करता हूं। इसमें एक उदाहरण है कि एक कस्टम सेल रेंडरर बनाने के लिए अपनी सूची में आइटम को प्रदर्शित करने के तरीके को प्रदर्शित करने के तरीके के रूप में। इसका पालन करना बहुत आसान है। इसमें माउस क्लिक श्रोता बनाने का एक उदाहरण भी है। आप इसे अधिकांश भाग के लिए कॉपी/पेस्ट करने में सक्षम होना चाहिए।

http://docs.oracle.com/javase/6/docs/api/

+0

सही, [डिफ़ॉल्ट रेंडरर] (http://docs.oracle.com/javase/tutorial/uiswing/components/list.html# रेंडरर) 'toString()' का आह्वान करके गैर-आइकन ऑब्जेक्ट प्रदर्शित करता है। प्रदर्शन कारणों से toString को ओवरराइड करने के लिए – trashgod

+3

-1। कस्टम दृश्य प्रतिनिधित्व का स्विंग तरीका एक कस्टम ListCellRenderer है। – kleopatra

+1

@ क्लेओपात्रा एक मूल्यवान बिंदु बनाता है; एक लिंक ['जेएलिस्ट 'ट्यूटोरियल] (http://docs.oracle.com/javase/tutorial/uiswing/components/list.html) इस उत्तर में सुधार करेगा। – trashgod

1

JList निर्माता है कि हम इस मामले के लिए के बारे में परवाह, वस्तुओं की एक सरणी लेता है के रूप में टोनी पहले ही बताया। यही वह जगह है जहां उसका जवाब उपयोगी हो रहा है (कोई अपराध टोनी नहीं)।

डिफ़ॉल्ट रूप से, ListCellRenderer जो JList उपयोग करता है JLabels जोड़ता है जिसमें ऑब्जेक्ट # toString() से टेक्स्ट होता है। तो, स्ट्रिंग्स को पारित करने के बजाय, आप इसे अपने उपयोगकर्ता ऑब्जेक्ट्स की एक सरणी पास करना चाहते हैं, फिर एक सूची चयन चयनकर्ता (जिसे उपयोगकर्ता द्वारा जेएलिस्ट पर क्लिक करने के बाद उपयोग किया जाता है) और एक सूचीसेलरेंडर (जो यह निर्धारित करता है कि उपयोगकर्ता ऑब्जेक्ट को JComponent में कैसे अनुवादित किया जाता है जिसे जेएलिस्ट के हिस्से के रूप में खींचा जाएगा)।

//generate your user data 
User[] userData = ...; 

//add an array of Objects to a JList using the constructor 
//(all classes extend java.lang.Object, including User) 
JList foo = new JList(userData); 

//overwrite the ListCellRenderer. This will take care of just displaying 
//the name of the user 
foo.addListSelectionListener(new ListSelectionListener(){ 
    JLabel rv = new JLabel(); 
    @Override 
    public Component getListCellRendererComponent(JList list, 
      Object value, int index, boolean isSelected, 
      boolean cellHasFocus){ 
     String s = (value != null && value instanceof User)? ((User)value).name:""; 
     rv.setText(s); 
     if (isSelected) { 
      rv.setBackground(list.getSelectionBackground()); 
      rv.setForeground(list.getSelectionForeground()); 
     } else { 
      rv.setBackground(list.getBackground()); 
      rv.setForeground(list.getForeground()); 
     } 
     rv.setEnabled(list.isEnabled()); 
     rv.setFont(list.getFont()); 
     rv.setOpaque(true); 
     return rv; 
    } 
}); 

//Now overwrite the ListSelectionListener which will take care of getting 
//user object when the user clicks it 
foo.addListSelectionListener(new ListSelectionListener(){ 
    @Override 
    public void valueChanged(ListSelectionEvent lse) { 
     User selectedValue = (User)((JList)lse.getSource()).getSelectedValue(); 
     //now you can do something with the User Object that was just selected 
     updateDatabase(selectedValue.id, selectedValue.name, 
       selectedValue.location); 
}); 
संबंधित मुद्दे