将文件从JList拖放到Windows资源管理器中,而不是使用JAR / EXE

时间:2013-05-27 09:30:19

标签: java swing drag-and-drop jlist file-transfer

我启用了拖放功能JList。现在我将我的Java项目中的包中的文件添加到JList a,让它们在前面显示它的图标。现在,如果我从JList到桌面的D& D,它的效果很好,但如果我使用JAR创建launch4j文件(或EXE文件),请拖放文件在JAR中不再有效。有解决方案吗这是我的TransferableTransferHandler类,它设置为JList:

public class TransferableFile implements Transferable
{
  private List<File> fileList;

  public TransferableFile(List<File> files)
  {
    fileList = files;
  }

  @Override
  public DataFlavor[] getTransferDataFlavors()
  {
    return new DataFlavor[] { DataFlavor.javaFileListFlavor };
  }

  @Override
  public boolean isDataFlavorSupported(DataFlavor flavor)
  {
    return flavor.equals(DataFlavor.javaFileListFlavor);
  }

  @Override
  public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException
  {
    if (flavor.equals(DataFlavor.javaFileListFlavor))
      return fileList;

    throw new UnsupportedFlavorException(flavor);
  }
}




public class FileListTransferHandler extends TransferHandler
{
  @Override
  public int getSourceActions(JComponent c)
  {
    return COPY;
  }

  @Override
  protected Transferable createTransferable(JComponent c)
  {
    @SuppressWarnings("unchecked")
    JList<File> list = (JList<File>) c;
    File value = (File) list.getSelectedValue();
    Vector<File> files = new Vector<>();
    String listEntry;
    listEntry = value.getAbsolutePath();
    JOptionPane.showMessageDialog(null, listEntry);
    files.add(new File(listEntry));
    TransferableFile tf = new TransferableFile(files);
    return tf;
  }
}

0 个答案:

没有答案