Используя этот вопрос, я создал приведенный ниже класс, который обрабатывает перетаскивание файлы в JTextField. Суть приложения заключается в том, чтобы иметь возможность перетаскивать файл в текстовое поле и задавать для текста текстового поля путь к файлу (вы можете ясно видеть цель в коде).
Моя проблема в том, что приведенный ниже код не компилируется. Ошибка компиляции гласит Невозможно ссылаться на неконечную переменную myPanel внутри внутреннего класса, определенного в другом методе
. Я мало работал с внутренними классами, поэтому может ли кто-нибудь показать мне, как устранить ошибку и заставить код вести себя так, как задумано?
Код:
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 droppedFiles = (List) 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);
}
}