2011-08-27 9 views
5

चुनें I JTileChooser को JTable सेल के संपादक के रूप में उपयोग कर रहा हूं। मैं चाहता हूं कि उपयोगकर्ता JFileChooser का उपयोग करके एक वैध फ़ाइल का चयन करें, फिर जब वे एंटर दबाएंगे, तो फ़ाइल पथ सेल पर सहेजा जाएगा। यदि वे सेल को साफ़ करना चाहते हैं तो यह एक समस्या प्रस्तुत करता है। तो मैं चाहता हूं कि वे JFileChooser को साफ़ करें और वह सेल को खाली स्ट्रिंग (या शून्य, जो भी हो) के साथ सेट करेगा।JFileChooser खाली फ़ाइल

मेरी समस्या यह है कि यदि आपने फ़ाइल नहीं चुनी है, तो आप स्वीकृति बटन दबा नहीं सकते हैं। मेरे कोड में, "खाली!" कभी मुद्रित नहीं होता है। क्या कोई फ़ाइल चयनित नहीं होने पर अनुमोदित बटन को अनुमति देने का कोई तरीका है? यहाँ मैं क्या करने की कोशिश की है या नहीं:

JFileChooser component = new JFileChooser(){ 
     public void approveSelection(){ 
      File f = getSelectedFile(); 
      if(f==null){ 
       System.out.println("empty!"); 
       return; 
      }else{ 
       if(!f.exists()){ 
        System.out.println("does not exist!"); 
       }else{ 
        super.approveSelection(); 
       } 

      } 
     } 
    }; 
+0

वह "खाली" प्रिंट नहीं करेगा! यदि आप JFileChooser में रद्द करें दबाते हैं? –

+0

यह नहीं करता है। मुझे JFileChooser की आंतरिक कार्यप्रणाली के बारे में निश्चित नहीं है, लेकिन मेरा अनुमान है कि यह कभी भी स्वीकृति देने का प्रयास नहीं करता है अगर उपयोगकर्ता रद्द करता है। तकनीकी रूप से – Andrea

उत्तर

4

आप JFileChooser रद्द चयन() विधि को ओवरराइड करने में रुचि ले सकते हैं जिसे उपयोगकर्ता फ़ाइल चुनने से रद्द कर देता है।

शायद यह एक खाली फ़ाइल नाम के JFileChooser चयन के साथ JTable सेल समाशोधन करने के लिए सहज और उपयोगकर्ता के अनुकूल नहीं है। JTable सेल के बगल में एक छोटा सा बटन बेहतर है, इसलिए यदि सेल सेल मान को रीसेट करने के लिए उपयोगकर्ता या किसी अन्य विकल्प पर क्लिक करता है तो सेल सेल को साफ़ करता है और सेल में फ़ाइल पथ बदलने के लिए केवल JFileChooser का उपयोग करता है।

+0

मैंने रीसेट बटन के बारे में भी सोचा था। यदि उपयोगकर्ता रद्द करना चाहता है तो मैं रद्द बटन को जगह में छोड़ना चाहता हूं। हालांकि मुझे लगता है कि शीर्ष पर बाहर निकलने के बटन के साथ किया जा सकता है ... – Andrea

+2

+1 इस विचार के लिए सेल को साफ़ करने वाला एक अलग बटन है। रद्द करने का चयन करना वास्तव में सेल को उस स्थिति में वापस ले जाना चाहिए जो JFileChooser खोला गया था। व्यापक विश्लेषण के लिए –

0

मुझे आश्चर्य है कि अगर आप एक वर्ग है कि JFileChooser फैली लिख सकते हैं, और इतना है कि यह समाशोधन निष्क्रिय नहीं होती पाठ क्षेत्र को संशोधित स्वीकार करें बटन।

+0

, स्वीकार्य बटन सक्षम है, जब मैं इसे क्लिक करता हूं तो कुछ भी नहीं होता है। लेकिन अवधारणा को – Andrea

+0

काम करना चाहिए मुझे नहीं लगता कि यह समाधान किसी फ़ाइल के लिए संभव नहीं होगा।यह वास्तव में JFileChooser क्लास में नहीं है जहां यह बटन क्लिक को संभालने और अनदेखा कर रहा है। –

1

जब आप जो कोड चलाते हैं उसे चलाते हैं, तो यह भी स्वीकृति में नहीं हो रहा है अगर चयन फ़ाइल नहीं है तो चयन हैंडलर। आंतरिक रूप से, एक शून्य चयन को रोकने के लिए कोड है। BasicFileChooserUI की स्वीकृति चयन चयन विधि से यह व्यवहार कॉम जिसमें एक चेक है कि यदि फ़ाइल नाम शून्य है, तो यह अनुमोदन के बिना वापस लौटाता है चयनकर्ता पर चयन, इसलिए JFileChooser को कभी भी एक अधिसूचना नहीं मिलती है कि "स्वीकार करें" दबाया गया था। यह वास्तव में एक लंबा बदसूरत काम है, इसलिए यदि आपको इसका उपयोग करने का कोई तरीका मिल गया है, तो व्यवहार को बदलने में मुश्किल होगी।

इस के आसपास काम करने के कई संभावित मार्गों:

1) आप किसी अन्य घटक में JFileChooser एम्बेड और इसके बजाय माता पिता घटक प्रदर्शित कर सकता है। फिर आप एक ही पैनल में JFileChooser और अपने कस्टम बटन दोनों जोड़ देंगे और कस्टम बटन के लिए बटन हैंडलिंग जोड़ देंगे। कस्टम बटन कुछ भी चुनने के इच्छुक उपयोगकर्ता को संभाल सकता है। यह पोस्ट कुछ संकेत दे सकता है: JFileChooser embedded in a JPanel

2) आप JFileChooser की "एक्सेसरी" सुविधा का दुरुपयोग कर सकते हैं। आम तौर पर यह फ़ाइल प्रकार का पूर्वावलोकन दिखाने के लिए "इरादा" है, लेकिन चूंकि यह एक मनमाना घटक लेता है, इसलिए कोई कारण नहीं है कि आप अपनी "कोई फ़ाइल" बटन नहीं जोड़ सकते हैं, और श्रोता सेट कर सकते हैं और संवाद बंद कर सकते हैं यदि वह बटन दबाया जाता है और अधिसूचना आपके टेबल सेल पर भेजता है कि यह एक खाली मूल्य होना चाहिए। अपेक्षाकृत आसान।

3) आप सहेजें और रद्द करने के बगल में एक अतिरिक्त बटन जोड़ने के लिए JFileChooser संवाद को हैक करने का प्रयास कर सकते हैं। यह शायद बहुत आसान नहीं है, और आपको शायद रद्द करें बटन ढूंढने के लिए कुछ मुश्किल करना होगा और अपने माता-पिता को एक और बटन जोड़ना होगा। यदि आप जावा विशेषज्ञ हैं तो शायद केवल तभी करने योग्य।

4) आप कुछ प्रकार की "नकली"/विशेष फ़ाइल बना सकते हैं, यदि चुना गया है, तो आप सामान्य हैंडलिंग के लिए अपवाद बनाते हैं और वास्तविक फ़ाइल नाम के बजाय एक खाली फ़ाइल नाम प्रदर्शित करते हैं।

+0

धन्यवाद। कम से कम अब मैं समझता हूं कि स्वीकृति बटन पर क्लिक करने से कुछ भी नहीं हुआ। – Andrea

+0

@Andrea एक बहुत ही समान समस्या के लिए (उपयोगकर्ता को फ़ाइल पसंद को साफ़ करने की अनुमति देता है) मैंने हाल ही में एक तीसरा बटन जोड़ने के लिए JFileChooser के _Windows_ LAF संस्करण को हैक किया है। यदि आप रुचि रखते हैं तो मैं आपको कोड भेज सकता हूं। _ केवल वंडर_, हालांकि आप मैक आदि के लिए समान चाल करने में सक्षम हो सकते हैं ... – user949300

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