2010-09-29 20 views
8

में जेटीआर अपडेट करना मैंने अपने जीयूआई में एक जेटीआर का इस्तेमाल किया और इसे जेएफआरएएम में जोड़ा। जब मैं इसे अपडेट करना चाहता हूं और अपने प्रोग्राम के किसी अन्य हिस्से में अपने नोड्स को बदलना चाहता हूं (जबकि प्रोग्राम चल रहा है, एक क्रिया के रूप में) मैं नए नोड्स जोड़ने की कोशिश करता हूं, या नोड्स को हटा देता हूं; लेकिन मेरा इंटरफ़ेस नहीं बदलता है। कृपया मुझे एक समाधान का सुझाव दें।जावा जीयूआई

संबंध

उत्तर

15

insertNodeInto सुझाव के अलावा आप भी उपयोग कर सकते हैं:

DefaultTreeModel model = (DefaultTreeModel)tree.getModel(); 
DefaultMutableTreeNode root = (DefaultMutableTreeNode)model.getRoot(); 
root.add(new DefaultMutableTreeNode("another_child")); 
model.reload(root); 
+1

तो आपके योग्य उत्तर के लिए धन्यवाद! हर बार जब मैं अपने पेड़ को अपडेट करना चाहता हूं तो मैं इस विधि का उपयोग करता हूं। – sajad

+3

यह काम करेगा लेकिन बड़े पेड़ से निपटने के दौरान एक "क्रूर बल" दृष्टिकोण है। उदाहरण के लिए, यदि मैं लूप करना चाहता था और 50,000 आइटम वाले पेड़ में 1000 नोड्स जोड़ना था तो यह बहुत अक्षम होगा। – Adamski

+1

जंगली में पेड़ कितनी बार इतना बड़ा हो जाता है कि यह चिंता करने में काफी धीमा हो जाता है? –

2

आप सुनिश्चित करें कि आपके मॉडल को अद्यतन करने के बाद आप एक घटना आग पैदा करने के लिए किसी भी पंजीकृत श्रोताओं घटना की सूचना प्राप्त करना यह हिदायत की जरूरत है। श्रोताओं में से एक JTree होगा और घटना प्राप्त करने पर यह पुन: चित्रित होगा।

nodeChanged nodesChanged nodeStructureChanged nodesWereInserted nodesWereRemoved

इसके अलावा

, सभी स्विंग प्रोग्रामिंग के साथ के रूप में आप सुनिश्चित करें कि आप घटना डिस्पैच पर अपने मॉडल अपडेट कर रहे हैं की जरूरत है:

उदाहरण के लिए, DefaultTreeModel तरीकों में शामिल है थ्रेड

+1

आपको इन घटनाओं को अपने आप से दूर नहीं करना है। आपको बस इतना करना है कि 'insertNodeInto' विधि को कॉल करके मॉडल को अपडेट करें, उदाहरण के लिए, और मॉडल को ट्रीमोडेल लिस्टेनर्स को फायरिंग घटनाओं का ख्याल रखने दें। – dogbane

+1

अच्छा बिंदु, हालांकि कुछ मामलों में इसे स्वयं प्रबंधित करना बेहतर होगा। उदाहरण के लिए, यदि मैं 1000 बाल नोड्स जोड़ना चाहता हूं तो मैं 1000 "नोड्स जोड़े गए" ईवेंट आग लगाना नहीं चाहूंगा। – Adamski

+0

धन्यवाद सर! लेकिन आपके द्वारा उल्लिखित इन विधियों को निजी और एक्सेस नहीं किया जा सका। – sajad

-1

आप जीयूआई पहलू सिर्फ अपने परिवर्तन नहीं दिखा रहा है मतलब है? आपको शायद repaint() और revalidate().

Here's किसी को कॉल करने का एक अच्छा विवरण देखना चाहिए।

+0

हाँ इस विधियों को कॉल करना जरूरी है। – sajad

+4

-1, कोई repaint() और revalidate() आवश्यक नहीं हैं। जब आप मॉडल को उतारते हैं तो मॉडल परिवर्तन के दृश्य को सूचित करने के लिए ज़िम्मेदार होता है ताकि वृक्ष खुद को पेंट कर सके। – camickr

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