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);
}
}
धन्यवाद! यह तय है। क्या मैं अभी भी टेक्स्ट फ़ील्ड के गुणों को बदलने में सक्षम हूं (उदाहरण के लिए, पाठ को अंदर बदलें) यदि इसे अंतिम घोषित किया गया है? – ewok
@ewok: हाँ। एक चर के लिए 'अंतिम' एकमात्र चीज यह सुनिश्चित करती है कि प्रारंभ होने के बाद आप इसे अन्य मान/संदर्भ निर्दिष्ट न करें। – unholysampler