我的 Swing 应用程序中有一个 JTextField
,它包含选择使用的文件的文件路径。目前我有一个 JFileChooser
用于填充此值。但是,我想为用户添加将文件拖放到此 JTextField
并将该文件的文件路径放入 JTextField
而不是总是使用 JFileChooser
。
如何才能做到这一点?
原文由 Ascalonian 发布,翻译遵循 CC BY-SA 4.0 许可协议
我的 Swing 应用程序中有一个 JTextField
,它包含选择使用的文件的文件路径。目前我有一个 JFileChooser
用于填充此值。但是,我想为用户添加将文件拖放到此 JTextField
并将该文件的文件路径放入 JTextField
而不是总是使用 JFileChooser
。
如何才能做到这一点?
原文由 Ascalonian 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您不想花太多时间研究这个相对复杂的主题,并且您使用的是 Java 7 或更高版本,这里有一个快速示例,说明如何使用 JTextArea
接受丢弃的文件作为丢弃目标:
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) {
// process files
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
原文由 rustyx 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
首先,您应该研究 Swing DragDrop 支持。之后,针对不同的操作系统几乎没有什么小技巧。一旦一切顺利,您将处理 drop() 回调。在此回调中,您需要检查 Transferable 的 DataFlavor。
对于 Windows,您可以只检查 DataFlavor.isFlavorJavaFileListType() 然后像这样获取数据
对于 Linux(可能还有 Solaris),DataFlavor 有点棘手。您需要制作自己的 DataFlavor 并且 Transferable 类型会有所不同