我的 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 许可协议
4 回答1.5k 阅读✓ 已解决
4 回答1.3k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
2 回答762 阅读✓ 已解决
2 回答1.8k 阅读
2 回答1.7k 阅读
2 回答1.3k 阅读
首先,您应该研究 Swing DragDrop 支持。之后,针对不同的操作系统几乎没有什么小技巧。一旦一切顺利,您将处理 drop() 回调。在此回调中,您需要检查 Transferable 的 DataFlavor。
对于 Windows,您可以只检查 DataFlavor.isFlavorJavaFileListType() 然后像这样获取数据
对于 Linux(可能还有 Solaris),DataFlavor 有点棘手。您需要制作自己的 DataFlavor 并且 Transferable 类型会有所不同