繁体   English   中英

将文件路径拖放到Java Swing JTextField

[英]Drag and Drop file path to Java Swing JTextField

使用这个问题 ,我创建了下面的类,它处理文件到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);

}

}

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

final JTextArea myPanel = new JTextArea();

这样,内部类可以被赋予一个指向变量实例的引用指针,而不必担心变量可能会在执行期间被更改为指向其他内容。

另一种选择是声明变量static。

static JTextArea myPanel = new JTextArea();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM