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);

}

}
InformationsquelleAutor ewok | 2012-03-12