java - 将文件路径拖放到 Java Swing JTextField

标签 java swing drag-and-drop

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

我的问题是下面的代码无法编译。编译错误状态 Cannot reference non-final variable myPanel inside an inner class defined in a different method。我对内部类的工作不多,所以有人可以告诉我如何解决错误并使代码按设计运行吗?

代码:

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

}

}

最佳答案

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

final JTextArea myPanel = new JTextArea();

这样一来,内部类就可以得到一个指向变量实例的引用指针,而不必担心该变量可能会在稍后的执行过程中更改为指向其他对象。

关于java - 将文件路径拖放到 Java Swing JTextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9669530/

相关文章:

java - 流和并行流

java - 如何在旅途中从 Java Spring Controller 的 GUI 下载 CSV 文件?

java - 奇怪的 setBackground() 错误 - Java Swing

python - 用于在一个列表中导入和重新排列的 PyQt QListView 拖放问题

java - 使用Java中的标记替换文件中的字符串

java - 垂直直方图

java - java-GUI-连接Jpanels或Jframes

java - 如何从已转换为字符串的数组列表中持续更新滚动 Pane

java - 在 swing/Java 中为自定义 DnD 设置 DragImage

python - wxpython:如何检查 OnDragOver 中的拖动数据?