Faites glisser et Déposez le fichier chemin d'accès de Java Swing component swing jtextfield
À l'aide de cette question, j'ai créé la classe ci-dessous, qui s'occupe de faire glisser et déplacer des fichiers vers un component swing jtextfield. Le point de l'application est d'être en mesure de faire glisser un fichier dans le champ de texte, et le texte du champ de texte pour le chemin d'accès du fichier (vous pouvez voir le but dans le code assez clairement).
Mon problème est que le code suivant ne compile pas. L'erreur de compilation états Cannot refer to non-final variable myPanel inside an inner class defined in a different method
. Je n'ai pas beaucoup travaillé avec des classes internes, donc peut seomeone me montrer comment résoudre l'erreur et obtenir le code pour se comporter comme prévu?
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);
}
}
Vous devez vous connecter pour publier un commentaire.
Que le message d'erreur dit,
myPanel
doit être défini dans une finale.De cette façon, l'intérieur de la classe peut être donné un pointeur de référence à la variable d'instance sans préoccupation que la variable peut être modifié pour pointer vers quelque chose d'autre plus tard au cours de l'exécution.
final
ne à une variable est de s'assurer que vous n'affectez pas une autre valeur de référence/après il est initialisé.Une autre option est de déclarer la variable statique.