ewo*_*wok 7 java swing drag-and-drop
使用这个问题,我创建了下面的类,它处理文件到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);
}
}
Run Code Online (Sandbox Code Playgroud)
如错误消息所示,myPanel需要定义为final.
final JTextArea myPanel = new JTextArea();
Run Code Online (Sandbox Code Playgroud)
这样,内部类可以被赋予一个指向变量实例的引用指针,而不必担心变量可能会在执行期间被更改为指向其他内容.
| 归档时间: |
|
| 查看次数: |
10408 次 |
| 最近记录: |