Java 使用拖放文件的JTable

Java 使用拖放文件的JTable,java,swing,file,drag-and-drop,jtable,Java,Swing,File,Drag And Drop,Jtable,我正在创建一个MusicLayer GUI,它在表上实现了一个拖放文件,允许 public void drop(DropTargetDropEvent dtde){ dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); Transferable t = dtde.getTransferable(); try { List fileList = (

我正在创建一个MusicLayer GUI,它在表上实现了一个拖放文件,允许

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方法将文件添加到我的MusicLayer中。

a
List
显然不是
文件
,它是
文件
列表

不幸的是,这是在我们得到泛型之前;),但基本上,您希望迭代
列表
,检查每个条目是否实际上是一个
文件
,并以任何方式处理它,例如

@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();
    }
}
@覆盖
公共同步作废删除(DropTargetDropEvent dtde){
if(dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)){
dtde.acceptDrop(DnDConstants.ACTION\u COPY\u或\u MOVE);
可转移t=dtde.getTransferable();
List fileList=null;
试一试{
fileList=(List)t.getTransferData(DataFlavor.javaFileListFlavor);
if(fileList!=null&&fileList.size()>0){
for(对象值:文件列表){
if(文件实例的值){
文件f=(文件)值;
如果(行<0){
addRow(新对象[]{f.getAbsolutePath(),“”,f.length(),“”,“”});
}否则{
insertRow(行,新对象[]{f.getAbsolutePath(),“”,f.length(),“”,“”});
行++;
}
}
}
}
}捕获(无支持的Lavore异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}否则{
dtde.rejectDrop();
}
}

对于一个可运行的示例,您可以更快地签出

以获得更好的帮助,发布or.
}catch(UnsupportedFlavorException ex){}catch(IOException ex){}
不要忽略异常输出。
For(对象o:fileList){
…然后检查
o
是否为
文件的
实例
…可能类似