2009-04-13 12 views
6

जब भी मैं एक जेएलिस्ट के लिए एक कस्टम सेल रेंडरर बनाता हूं, तो इसमें जो तत्व शामिल हैं, वे कभी भी क्रियाओं का जवाब नहीं देते हैं। उदाहरण के लिए, यदि मेरे पास सेल रेंडरर एक जेपीनेल को तत्वों के साथ लौटाता है, जिसमें से एक एक्शनलिस्टर है, तो यह बिल्कुल प्रतिक्रिया नहीं देता है।जावा स्विंग - जेएलिस्ट कस्टम सेल प्रतिपादन - कैप्चरिंग क्रियाएं

यह क्यों है?

+1

बहुत अच्छा सवाल है। मैंने सोचा कि यह आइटम लिस्टेनर्स के साथ कुछ करने के लिए हो सकता है, लेकिन अब मुझे ऐसा नहीं लगता ... मैंने नमूना कोड खोजने की कोशिश की लेकिन सफल नहीं हुआ। – Uri

+0

हाय, मुझे एक ही समस्या का सामना करना पड़ रहा है, क्या आप समस्या को हल करने में सक्षम हैं? – user236501

उत्तर

6

जिस आइटम को आप एक सूची सेल रेंडरर के रूप में लौटाते हैं, वह बिल्कुल उस उद्देश्य के लिए है: प्रतिपादन। जेएलिस्ट के साथ श्रोताओं को पंजीकृत करें (आमतौर पर, आप एक सूची चयन सूची चाहते हैं)।

11

रेंडरर कोशिकाओं के लिए घटकों लौटने के लिए एक कारखाने की तरह लग सकता है, लेकिन वास्तव में यह फ्लाईवेट दृष्टिकोण प्रतिपादन अनुसरण करता है और सभी कोशिकाओं प्रतिपादन के लिए ही घटक का उपयोग करता है (getListCellRendererComponent() की प्रत्येक कॉल को पुन: कॉन्फ़िगर माना जाता है एक विशिष्ट सेल के लिए एक ही घटक उदाहरण और इसे वापस कर दें ताकि सेल को प्रस्तुत किया जा सके)।

इस तरह, आप JList (साथ ही JTable और JTree) प्रत्येक सेल के लिए घटकों को कम करने के बिना बड़ी मात्रा में कोशिकाओं को प्रदर्शित कर सकते हैं। साइड इफेक्ट के रूप में, रेंडर घटक घटनाओं का जवाब नहीं दे सकता है, क्योंकि इसे केवल रेंडर लूप के दौरान उपयोग किया जाता है, लेकिन घटक पेड़ में दिखाई नहीं देता है।

नील Coffey कहा, तुम JList (JTable, JTree) करने के लिए अपने श्रोताओं में जोड़ सकते हैं बजाय, और प्रेषण करने के लिए जो सेल प्रभावित हुआ है और इस तरह सेल विशिष्ट तर्क से निपटने के सहायक विधियों (locationToIndex(...), getCellBounds(...)) का उपयोग बस के रूप में।

+1

+1 एक सभ्य स्पष्टीकरण के लिए – basszero

+1

रबर स्टैंप के रूप में प्रस्तुत घटक के बारे में सोचें। –

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