Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
拖放到Java Swing JTextField的文件路径_Java_Swing_Drag And Drop - Fatal编程技术网

拖放到Java Swing JTextField的文件路径

拖放到Java Swing JTextField的文件路径,java,swing,drag-and-drop,Java,Swing,Drag And Drop,使用,我创建了下面的类,它处理将文件拖放到JTextField的操作。应用程序的要点是能够将文件拖动到文本字段中,并将文本字段的文本设置为文件的路径(您可以在代码中非常清楚地看到目标) 我的问题是下面的代码没有编译。编译错误状态无法在不同方法定义的内部类中引用非最终变量myPanel。我很少使用内部类,所以seomeone可以告诉我如何解决错误并使代码按设计的方式运行吗 代码: import java.awt.datatransfer.DataFlavor; 导入java.awt.dnd.DnD

使用,我创建了下面的类,它处理将文件拖放到JTextField的操作。应用程序的要点是能够将文件拖动到文本字段中,并将文本字段的文本设置为文件的路径(您可以在代码中非常清楚地看到目标)

我的问题是下面的代码没有编译。编译错误状态
无法在不同方法定义的内部类中引用非最终变量myPanel
。我很少使用内部类,所以seomeone可以告诉我如何解决错误并使代码按设计的方式运行吗

代码:

import java.awt.datatransfer.DataFlavor;
导入java.awt.dnd.DnDConstants;
导入java.awt.dnd.DropTarget;
导入java.awt.dnd.DropTargetDropEvent;
导入java.io.File;
导入java.util.List;
导入javax.swing.*;
公开课考试{
公共静态void main(字符串[]args){
JTextArea myPanel=新的JTextArea();
myPanel.setDropTarget(新的DropTarget(){
公共同步作废删除(DropTargetDropEvent evt){
试一试{
evt.acceptDrop(DnDConstants.ACTION\u副本);
列表droppedFiles=(列表)evt
.getTransferable().getTransferData(
DataFlavor.javaFileListFlavor);
用于(文件:droppedFiles){
/*
*注:
*当我把它改成println时,
*它会打印正确的路径
*/
myPanel.setText(file.getAbsolutePath());
}
}捕获(例外情况除外){
例如printStackTrace();
}
}
});
JFrame=新JFrame();
frame.add(myPanel);
frame.setVisible(true);
}
}

正如错误消息所说,
myPanel
需要定义为final

final JTextArea myPanel = new JTextArea();

通过这种方式,可以为内部类提供一个指向变量实例的引用指针,而不必担心变量在执行过程中可能会被更改为指向其他对象。

另一个选项是将变量声明为静态

static JTextArea myPanel = new JTextArea(); 静态JTextArea myPanel=newjtextarea();
谢谢这就解决了问题。如果文本字段被声明为final,我是否仍然能够更改其属性(例如,更改其中的文本)?@ewok:Yes。
final
对变量所做的唯一一件事是确保在初始化变量后不会为其分配另一个值/引用。 static JTextArea myPanel = new JTextArea();