Drag und Drop-Datei-Pfad zu Java Swing JTextField
Mit diese Frage, habe ich die folgende Klasse, die Griffe ziehen und ablegen von Dateien in ein JTextField. Der Punkt der Anwendung ist in der Lage, ziehen Sie eine Datei in das Textfeld und das Textfeld den Satz, um den Pfad der Datei (Sie können sehen, das Ziel in der code ziemlich klar).
Mein problem ist der folgende code wird nicht kompiliert. Der Kompilierungsfehler Staaten Cannot refer to non-final variable myPanel inside an inner class defined in a different method
. Ich habe nicht viel gearbeitet mit inneren Klassen, so können seomeone zeigen Sie mir, wie ich den Fehler beheben und den code verhält sich wie entwickelt?
Code:
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);
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie die Fehlermeldung sagt,
myPanel
werden muss als final definiert.Diese Weise die innere Klasse gegeben werden kann, eine Referenz-Zeiger auf die variable-Instanz, ohne die Sorge, dass die variable verändert werden kann, um auf etwas anderes zeigen später, während der Ausführung.
final
tut, um eine variable ist, sicherzustellen, dass Sie nicht die Zuweisung eines Wert - /Verweis auf es, nachdem es initialisiert wird.Weitere option ist, um die variable zu deklarieren statische.