मेरे पास TreeModel
में प्रदर्शित डेटा ऑब्जेक्ट है, और मैं अपने JTree
में इसका केवल एक हिस्सा दिखाना चाहता हूं - तर्क के लिए, पत्तियों और उनके माता-पिता कहें। मैं अनावश्यक नोड्स को कैसे छुपा/फ़िल्टर कर सकता हूं?एक जेटी में छुपा/फ़िल्टरिंग नोड्स?
उत्तर
तब तक जब तक यह एक पेड़ दिखाई दे रहा है, तो TreeModel
जो आपको मौजूदा TreeModel
फ़िल्टर करता है, वह काफी सरल होना चाहिए।
क्या आप इसे और समझा सकते हैं? –
आप क्या जानना चाहते हैं। आपको उन उदाहरणों को ढूंढना आसान लगेगा जो टेबलमोडेल के समान हैं। आप एक ट्रीमोडेल बनाना चाहते हैं जो आपके वर्तमान मॉडल को प्रतिनिधि करता है, लेकिन उन नोड्स को हटा देता है जिन्हें आप दिखाना नहीं चाहते हैं।मेरा सुझाव है, कम से कम शुरू करने के लिए, आप सभी घटनाओं को ढांचे के रूप में प्रचारित करते हैं (हालांकि इसके बारे में सोचने के लिए आते हैं जो पेड़ के विस्तार को पतन का कारण बनेंगे)। –
समस्या का एक हिस्सा यह है कि "उन नोड्स को हटाएं जिन्हें मैं प्रकट नहीं करना चाहता हूं" उनके बच्चों को भी हटा देता है, भले ही मैं उन्हें दिखाना चाहूंगा। –
आपके ट्रीनेड बनाने के लिए उपयोग किए जाने वाले कोड का लाभ उठाएं और केवल उन तत्वों सहित ट्रीनोड (पुनर्निर्माण) का पुनर्निर्माण करें। फ़िल्टर नोड नोड के साथ TreeModel पर रूट नोड सेट करें।
यह करने योग्य है लेकिन जब आप एक और मॉडल सेट करते हैं, तो JTree हुड के नीचे बहुत सी चीजें करता है, खासकर यदि यह संरचनात्मक परिवर्तन का पता लगाता है। यह गति और स्मृति पदचिह्न दोनों के प्रदर्शन के संदर्भ में बहुत अच्छा नहीं है। – gouessej
मेरे अंतिम कार्यान्वयन:
- दो
TreeModel
रों है, एक अंतर्निहित और फ़िल्टर्ड एक। - जब अंतर्निहित
TreeModel
पर कोई परिवर्तन होता है, तो फ़िल्टर किए गएTreeModel
को स्क्रैच से पुनर्निर्माण करें। प्रत्येक नोड को क्लोन करें जो दिखाना चाहिए, और इसे फ़िल्टर किए गएTreeModel
(या रूट अगर कोई दिखाई नहीं दे रहा है) में अपने पहले दिखाई देने वाले पूर्वजों में जोड़ें। यदि आप उत्सुक हैं, तो नीचे teh codez देखें। यह उपयोगकर्ता द्वारा खोले गए हर पथ को ध्वस्त करने का दुर्भाग्यपूर्ण दुष्प्रभाव है। इस के आसपास जाने के लिए, मैंने फ़िल्टर किए गए
TreeModel
परTreeModelListener
जोड़ा। जब मॉडल बदलता है, तो मैं विस्तारित पथJTree
(getExpandedDescendants()
का उपयोग करके) में सहेजता हूं, फिर बाद में उन्हें फिर से विस्तारित करें (SwingUtilities.invokeLater()
का उपयोग करके)।मुझे
TreeNode
कक्षा में ओवरराइड करना था, जिसका उपयोग मैं कर रहा था ताकि नए क्लोन नोड पुराने क्लोन नोड्स के समान हों।
...
populateFilteredNode(unfilteredRoot, filteredRoot);
...
void populateFilteredNode(TreeNode unfilteredNode, TreeNode filteredNode)
{
for (int i = 0; i < unfilteredNode.getChildCount(); i++)
{
TreeNode unfilteredChildNode = unfilteredNode.getChildAt(i);
if (unfilteredChildNode.getType() == Type.INVISIBLE_FOLDER)
{
populateFilteredNode(unfilteredChildNode, filteredNode);
}
else
{
TreeNode filteredChildNode = unfilteredChildNode.clone();
filteredNode.add(filteredChildNode);
populateFilteredNode(unfilteredChildNode, filteredChildNode);
}
}
}
आप JXTree की कोशिश की है? (दुर्भाग्य से वेबसाइट अभी नीचे है, लेकिन आप मिरर के लिए Google पर जा सकते हैं)
दरअसल, JXTree में फ़िल्टर का समर्थन कभी भी लागू नहीं किया गया है, भले ही इसकी योजना बनाई गई हो, मैं बस अपने स्रोत कोड में फ़िल्टर करने के बारे में एक संरक्षित अप्रयुक्त फ़ील्ड देखता हूं। – gouessej
यदि आप एक वाणिज्यिक समाधान की तलाश में हैं, तो जैइडसोफ्ट में एक फ़िल्टर करने योग्य ट्रेमोडेल है। इसके अलावा, स्विंगएक्स में एक फ़िल्टर एपीआई है जो JXTable, JXTreeTable, JXTree, और JXList पर काम करेगी।
धन्यवाद! मैंने जइड एक की कोशिश की, लेकिन मैं इसे जो करने के लिए नहीं कर सका। जब मुझे मौका मिलता है तो मैं स्विंगएक्स एपीआई में देखूंगा। –
आप वास्तव में क्या करने की कोशिश कर रहे हैं? यदि आप विवरण प्रदान करते हैं, तो मैं कुछ विशिष्ट कोड दे सकता हूं। जो मैं समझता हूं, उससे खोज मानदंडों से फ़िल्टर की गई पत्तियां उनके माता-पिता के साथ दिखायी जाएंगी। यह उनके वेबस्टार्ट डेमो में दिखाया गया है, http://www.jidesoft.com/products/download.htm पर, 'सभी जैइड उत्पादों के लिए डेमो'। इसमें, क्विकफिल्टर (वृक्ष) डेमो देखें। – Aakash
जैसा कि मुझे याद है, मुझे अदृश्य माता-पिता के दृश्यमान बच्चों को दिखाने के लिए जैइड पेड़ मॉडल प्राप्त करने में परेशानी हो रही थी। –
आपको GlazedLists से अवगत होना चाहिए। यह छोटे प्रयास के साथ जटिल तालिका परिवर्तन करने के लिए एक शानदार पुस्तकालय है। वे भी पेड़ तक फैल गए हैं। इसे ग्लेज़ेडलिस्ट के काम करने के तरीके में लाने के लिए आपके मौजूदा कोड का थोड़ा सा रिफैक्टरिंग की आवश्यकता हो सकती है। लेकिन यह देखने के लिए डेमो और वेबकास्ट देखें कि यह कितना शक्तिशाली है। (यह मेरे विचार में आवश्यक स्विंग पुस्तकालयों में से एक है, और यह खुला स्रोत है।)
मुझे पेड़ के लिए ग्लेज़ेडलिस्ट में कुछ भी नहीं दिखाई देता है: https://java.net/projects/glazedlists/sources/svn/show/trunk/source/ca/odell/glazedlists/swing?rev=2375 कृपया आप हमें बता सकते हैं कि आपको कहां मिला पेड़ के लिए इसकी फ़िल्टरिंग एपीआई? – gouessej
@gouessej यह एक्सटेंशन फ़ोल्डर में है: https://java.net/projects/glazedlists/sources/svn/show/trunk/extensions/treetable/source/ca/odell/glazedlists/swing?rev=2375 – arooaroo
धन्यवाद लेकिन यह वृक्षों पर पेड़ की मेज पर काम करता है। – gouessej
इस कार्यान्वयन पर एक नज़र डालें: http://www.java2s.com/Code/Java/Swing-Components/InvisibleNodeTreeExample.htm
यह वास्तव में दूर करने के लिए एक "isVisible" संपत्ति जोड़ने के बजाय तो DefaultMutableNode की उपवर्गों बनाता है/TreeModel से नोड्स जोड़ना।
मुझे हाल ही में एक जेटी में फ़िल्टरिंग को लागू करने की आवश्यकता है और यह समाधान अब तक का सबसे साफ और सरल था। – Aaron
- 1. यूनिट एक एम्बेडेड जेटी
- 2. जेटी
- 3. जेटी
- 4. जेटी
- 5. जेटी
- 6. जेटी
- 7. जेटी
- 8. नोड्स एक यादृच्छिक सूचक
- 9. एक्सएमएल नोड्स एक XmlElement
- 10. जेटी 7
- 11. रिंग/जेटी
- 12. मैं जेटी
- 13. HtmlAgilityPack - एक दस्तावेज़ में सभी नोड्स मिल
- 14. एम्बेडेड जेटी में गर्म तैनाती
- 15. Hazelcast समर्पित नोड्स
- 16. नोड्स
- 17. बड़ी संख्या में नोड्स
- 18. जेटी: डेटाबेस से पुनर्प्राप्त वस्तुओं से 1000+ बच्चों के नोड्स की ड्राइंग तेज करें?
- 19. xpath: नोड्स एक एक्स पूर्वज
- 20. नक्शा जेटी संसाधन हैडलर एक यूआरएल
- 21. एसबीटी वेब प्लगइन: वैध कुंजी नहीं: जेटी-रन (समान: जेटी-पोर्ट, जेटी-कॉन्टेक्ट, रन)
- 22. एक जेटी में पंक्तियों के बीच लंबवत पैडिंग/स्थान जोड़ना?
- 23. जेटी को यूआरएल
- 24. एंबेडेड जेटी और एसओएपी
- 25. जेटी स्टैंडअलोन सर्वर
- 26. जेटी प्रोग्रामेटिक रूप से
- 27. ग्रहण और जेटी
- 28. लिफ्ट और जेटी
- 29. जेटी और टॉमकैट
- 30. नेटवर्क नोड्स में अन्य नोड्स/किनारों के साथ न्यूनतम ओवरलैप के साथ लेबल नोड्स
यह डुप्लिकेट की तुलना में पुराना और कम जानकारीपूर्ण धागा है: http://stackoverflow.com/questions/9234297/filtering-on-a-jtree – bobjandal