स्विंग पेशेवरों को नमस्कार, यहां आपके लिए एक अच्छा (मुझे आशा है) प्रश्न है।JFileChooser व्यवहार को बदलना: फ़ाइल पथ में प्रवेश पर "चुनना" को रोकना JTextField
नीचे दिए गए कार्य आवश्यकताओं और संभावित समाधान हैं। मैं चाहता हूं कि इस बारे में कुछ विचार साझा करने के लिए किसी को इतना कट्टर अनुभव हो।
यह कोडिंग या ऐसा कुछ की आवश्यकता नहीं है, मैं सिर्फ सामान्य सलाह की जरूरत के रूप में जो करने के लिए दृष्टिकोण तथ्य मैं निजी प्रतीकों जो sun.swing और/में रहते हैं के साथ काम करने की जरूरत के बारे में और अधिक विश्वसनीय है या javax.swing.plaf संकुल।
कार्य JFileChooser व्यवहार को संशोधित/परिवर्तित करना है (वास्तव में थोड़ा सा, वास्तव में)।
जब उपयोगकर्ता प्रेस फ़ाइल नाम JTextField में दर्ज करें, और क्षेत्र एक निर्देशिका करने के लिए एक पथ है, dir नहीं "का चयन करें" है, लेकिन बजाय इसे करने के लिए स्विच। हां, संवाद निर्देशिका को स्वीकार करने के लिए कॉन्फ़िगर किया गया है, लेकिन हमें फ़ाइल सूची तालिका में केवल "ओपन" बटन पर क्लिक करके, और संभवतः डबल-क्लिक स्वीकार करने की आवश्यकता है।
एक:
फ़ाइल नाम पाठ क्षेत्र
सामान्य समाधान विकल्पों में से Here're जोड़ी में प्रवेश से टकराने के माध्यम से 1GB डेटा की तुलना में अधिक के साथ एक dir/फ़ाइल का चयन से उपयोगकर्ता को रोकने के। संपत्ति-आधारित परिवर्तनों को सुनें जो JFileChooser प्रदान करता है (जो AFAICS तथ्य के बाद ट्रिगर होते हैं और हमें यहां आवश्यक नियंत्रण की डिग्री प्रदान नहीं करेंगे)।
बी। javax.swing.plaf.basic.BasicFileChooserUI साथ टिंकर (refrection के माध्यम से, निजी स्तर की कैप्सूलीकरण तोड़ने) और
private Action approveSelectionAction = new ApproveSelectionAction();
ताकि हमारे कस्टम क्रिया 1 और 2. इस के लिए अतिरिक्त चेकों करता
के संदर्भ में परिवर्तन प्लेफ पैकेज के साथ लिंक से संपर्क करें और इस यूआई क्लास के नीचे कुछ वर्ग में इस क्रिया को किसी तरह से ओवरराइड किया जा सकता है।
सी। JFileChooser घटक पदानुक्रम को पार करें, JTextField (जो स्पष्ट रूप से घटक पेड़ में केवल एक बार होना चाहिए) को ढूंढें, हमारे कस्टम चेक के साथ उस JTextField पर लटकने वाले सभी एक्शन श्रोताओं को सजाने के लिए। मेरा डिबगिंग सत्र दिखाता है कि यह JTextField sun.swing.FilePane में रहने वाले JTextField का कुछ अज्ञात सबक्लास है। यह दृष्टिकोण अधिक ओओ-फ्रेंडली प्रतीत होता है, लेकिन एक मौका है कि कुछ ओएस के लिए यह टेक्स्ट फ़ील्ड अनुपस्थित है, या कुछ अन्य JTextField पदानुक्रम में भी मौजूद है।
ठीक है, ऐसा लगता है कि सार्वजनिक JFileChooser API उस व्यवहार को प्राप्त करने के लिए पर्याप्त नहीं होगा, जबकि अन्य दो विकल्प या तो गहरे जादू या अयोग्य (दीर्घकालिक) या यहां तक कि दोनों भी हैं।
तो सवाल यह है कि आप किस दृष्टिकोण का चयन करेंगे और क्यों?
ओह मुझे डंबो, मैं इसका परीक्षण करूंगा और अपने निष्कर्षों के साथ रिपोर्ट करूंगा। –
वैसे हाँ, मैं कुछ मामलों में super.approveSelection() को कॉल न करके चयन ईवेंट को स्वीकृति देने और अक्षम करने में काफी सक्षम था जिसे अमान्य माना जाना चाहिए था। यह काफी अच्छा समाधान था, धन्यवाद। –