2012-03-12 13 views
6

this question का उपयोग करके फ़ाइल पथ खींचें और छोड़ें, मैंने नीचे दिया गया वर्ग बनाया है, जो फ़ाइलों को ड्रैग और ड्रॉप को JTextField में संभालता है। एप्लिकेशन का बिंदु टेक्स्ट फ़ील्ड में फ़ाइल खींचने में सक्षम होना है, और टेक्स्ट फ़ील्ड का टेक्स्ट फ़ाइल के पथ पर सेट करना है (आप कोड में लक्ष्य को स्पष्ट रूप से देख सकते हैं)।जावा स्विंग JTextField

मेरी समस्या नीचे दी गई कोड संकलित नहीं है। संकलन त्रुटि Cannot refer to non-final variable myPanel inside an inner class defined in a different method बताती है। मैंने आंतरिक कक्षाओं के साथ बहुत कुछ नहीं किया है, तो क्या सीमोन मुझे दिखा सकता है कि त्रुटि को कैसे हल किया जाए और कोड को डिज़ाइन के रूप में व्यवहार करने के लिए कैसे प्राप्त किया जाए?

कोड: त्रुटि संदेश दर्शाता है

import java.awt.datatransfer.DataFlavor; 
import java.awt.dnd.DnDConstants; 
import java.awt.dnd.DropTarget; 
import java.awt.dnd.DropTargetDropEvent; 
import java.io.File; 
import java.util.List; 

import javax.swing.*; 

public class Test { 

public static void main(String[] args) { 
    JTextArea myPanel = new JTextArea(); 

    myPanel.setDropTarget(new DropTarget() { 
     public synchronized void drop(DropTargetDropEvent evt) { 
      try { 
       evt.acceptDrop(DnDConstants.ACTION_COPY); 
       List<File> droppedFiles = (List<File>) evt 
         .getTransferable().getTransferData(
           DataFlavor.javaFileListFlavor); 
       for (File file : droppedFiles) { 
        /* 
        * NOTE: 
        * When I change this to a println, 
        * it prints the correct path 
        */ 
        myPanel.setText(file.getAbsolutePath()); 
       } 
      } catch (Exception ex) { 
       ex.printStackTrace(); 
      } 
     } 
    }); 

    JFrame frame = new JFrame(); 
    frame.add(myPanel); 
    frame.setVisible(true); 

} 

} 

उत्तर

5

के रूप में, myPanel जरूरतों अंतिम रूप में परिभाषित किया जा सकता है।

final JTextArea myPanel = new JTextArea(); 

इस तरह भीतरी वर्ग चिंता यह है कि चर बाद में निष्पादन के दौरान कुछ और करने के लिए बात करने के लिए बदला जा सकता है बिना चर उदाहरण के लिए एक संदर्भ सूचक दिया जा सकता है।

+0

धन्यवाद! यह तय है। क्या मैं अभी भी टेक्स्ट फ़ील्ड के गुणों को बदलने में सक्षम हूं (उदाहरण के लिए, पाठ को अंदर बदलें) यदि इसे अंतिम घोषित किया गया है? – ewok

+1

@ewok: हाँ। एक चर के लिए 'अंतिम' एकमात्र चीज यह सुनिश्चित करती है कि प्रारंभ होने के बाद आप इसे अन्य मान/संदर्भ निर्दिष्ट न करें। – unholysampler

0

एक और विकल्प वैरिएबल स्थिर घोषित करना है।

 

    static JTextArea myPanel = new JTextArea(); 

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