我正在创建一个 MusicPlayer GUI,它实现了将文件拖放到 table 上,从而允许
public void drop(DropTargetDropEvent dtde){
dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
Transferable t = dtde.getTransferable();
try {
List fileList = (List)t.getTransferData(DataFlavor.javaFileListFlavor);
File f = (File)fileList;
addDnDFile(fileList);
} catch (UnsupportedFlavorException ex) {
} catch (IOException ex) {
}
}
到目前为止,我似乎无法找出任何可能的方法将列表转换为文件,以便能够使用我的 addDnDFile 方法将文件添加到我的音乐播放器。
最佳答案
List
显然不是 File
,它是 File
的 List
不幸的是,这是在我们获得泛型之前;),但基本上,您想要迭代 List
并检查每个条目实际上是一个 File
并处理例如,以您想要的任何方式进行
@Override
public synchronized void drop(DropTargetDropEvent dtde) {
if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
Transferable t = dtde.getTransferable();
List fileList = null;
try {
fileList = (List) t.getTransferData(DataFlavor.javaFileListFlavor);
if (fileList != null && fileList.size() > 0) {
for (Object value : fileList) {
if (value instanceof File) {
File f = (File) value;
if (row < 0) {
model.addRow(new Object[]{f.getAbsolutePath(), "", f.length(), "", ""});
} else {
model.insertRow(row, new Object[]{f.getAbsolutePath(), "", f.length(), "", ""});
row++;
}
}
}
}
} catch (UnsupportedFlavorException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} else {
dtde.rejectDrop();
}
}
有关可运行的示例,您可以查看 drag and drop files from OS into JTable java
关于java - JTable 使用 Swings 拖放文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36443201/