Java 使用拖放文件的JTable
我正在创建一个MusicLayer GUI,它在表上实现了一个拖放文件,允许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 = (
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
是否为文件的实例
…可能类似