使用this question,我創建了下面的類,它處理將文件拖放到JTextField的類。應用程序的要點是能夠將文件拖入文本字段,並將文本字段的文本設置爲文件路徑(您可以非常清楚地看到代碼中的目標)。將文件路徑拖放到Java Swing JTextField
我的問題是下面的代碼不能編譯。編譯錯誤狀態爲Cannot refer to non-final variable myPanel inside an inner class defined in a different method
。我對內部類沒有太多的工作,所以seomeone能告訴我如何解決錯誤並讓代碼按照設計行事?
代碼:
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 2012-03-12 15:37:12
@ewok:是的。 'final'對變量唯一的作用是確保在初始化後不會爲其指定另一個值/引用。 – unholysampler 2012-03-12 15:58:46