2010-01-11 14 views
7

मैं DefaultComboBoxModel का उपयोग JComboBox में ग्राहकों की एक सूची प्रदर्शित करने के लिए कर रहा हूं। सूची वर्तमान में केवल उनका नाम प्रदर्शित करती है। मैं DefaultComboBoxModel के भीतर प्रत्येक ग्राहक का संदर्भ भी लेना चाहता हूं ताकि जब कोई नाम चुना जाए, तो यह वास्तविक ग्राहक ऑब्जेक्ट का संदर्भ भी रखेगा।जावा स्विंग: डिफॉल्ट कॉम्बोबॉक्सबॉक्स और ओवरराइड विधियों को बढ़ाएं

इसे प्राप्त करने के लिए, मुझे संदेह है कि मुझे DefaultComboBoxModel का विस्तार करना होगा और संभवतः addElement() विधि को ओवरराइड करना होगा? या क्या मैं सिर्फ एक नई विधि जोड़ सकता हूं जो ग्राहकों के लिए मेरे संदर्भ भी संग्रहीत कर सकता है? यदि हां, तो क्या मुझे यह देखने के लिए DefaultComboBoxModel के स्रोत कोड को देखना होगा कि यह तत्वों को कैसे संग्रहीत करता है? क्षमा करें अगर यह प्रश्न भ्रमित है लेकिन मैं यह नहीं समझ सकता कि इसे सही तरीके से कैसे किया जाए। पढ़ने के लिए धन्यवाद।

उत्तर

6

यदि आप अपने ग्राहक ऑब्जेक्ट में JComboBox में जो भी प्रस्तुत करना चाहते हैं उसे वापस करने के लिए toString() को ओवरराइड करते हैं, तो यह ठीक काम करेगा। यदि आप अन्य उद्देश्यों के लिए ToString का उपयोग कर रहे हैं तो आपको ग्राहक ऑब्जेक्ट से सही फ़ील्ड का उपयोग करने के लिए मॉडल या रेंडरर को ओवरराइड करने की आवश्यकता है।

-दिनांक टॉम की Suggestion- एक नई वस्तु CustomerView जो वास्तविक ग्राहक वस्तुओं लपेटता है और इस प्रकार यह के लिए एक संदर्भ प्रदान कर सकते हैं, लेकिन जो भी toString() को ओवरराइड करता है ग्राहक का नाम वापस जाने के लिए तैयार करें।

+3

'ग्राहक.तोस्ट्रिंग' को बदलने पर मॉडल को बदलने के बजाय या अधिक (रेंडरर) को बदलने के बजाय, 'ग्राहककंपो व्यू' (या समान नाम) जोड़ें जिसमें 'ग्राहक' ऑब्जेक्ट का उचित प्रदर्शन प्रतिनिधित्व हो (विधियों के साथ 'toString' और' getCustomer'/'ग्राहक')। –

+0

@ टॉम हौटिन - धन्यवाद कि यह स्पष्ट रूप से बहुत बेहतर है – willcodejavaforfood

+0

उत्कृष्ट सुझाव, धन्यवाद! – Johan

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