Swing应用程序 – >拖放到桌面/文件夹

当Mac的Finder,Windows的资源管理器确实将Swing应用程序中的特定项目拖放到桌面和文件夹时,如何获取我删除的前一个路径?

我很高兴教我一个必要的课程和方法。

这是一个小程序,但它适用于任何框架或窗口:

public class DropApplet extends Applet implements DropTargetListener { // . . . private DropTarget dropTarget; // . . . public void init() { if (dropTarget == null) { dropTarget = new DropTarget(this, this); } // . . . } public void dragEnter(DropTargetDragEvent arg0) { // nothing } public void dragOver(DropTargetDragEvent arg0) { // nothing } public void dropActionChanged(DropTargetDragEvent arg0) { // nothing } public void dragExit(DropTargetEvent arg0) { // nothing } public void drop(DropTargetDropEvent evt) { final List result = new ArrayList(); int action = evt.getDropAction(); evt.acceptDrop(action); try { Transferable data = evt.getTransferable(); DataFlavor flavors[] = data.getTransferDataFlavors(); if (data.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { List list = (List) data.getTransferData( DataFlavor.javaFileListFlavor); processFiles(list); } } catch (UnsupportedFlavorException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { evt.dropComplete(true); repaint(); } } private void processFiles(List files) throws IOException { // . . . } } 

将文件从swing应用程序拖动到桌面稍微复杂一些,并非所有swing组件都能够做到这一点。

以下是包含文件的JList的示例。 您可以将文件从finder / explorer拖放到此列表中,然后将这些文件拖到另一个位置。

 package dnd; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetDragEvent; import java.awt.dnd.DropTargetDropEvent; import java.awt.dnd.DropTargetEvent; import java.awt.dnd.DropTargetListener; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.swing.DefaultListModel; import javax.swing.JComponent; import javax.swing.JList; import javax.swing.TransferHandler; public class DnDFrame extends javax.swing.JFrame implements DropTargetListener { private DefaultListModel listModel = new DefaultListModel(); private DropTarget dropTarget; /** Creates new form DnDFrame */ public DnDFrame() { initComponents(); dropTarget = new DropTarget(list, this); list.setModel(listModel); list.setDragEnabled(true); list.setTransferHandler(new FileTransferHandler()); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") //  private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; jLabel1 = new javax.swing.JLabel(); jScrollPane1 = new javax.swing.JScrollPane(); list = new javax.swing.JList(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); getContentPane().setLayout(new java.awt.GridBagLayout()); jLabel1.setText("Files:"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; getContentPane().add(jLabel1, gridBagConstraints); jScrollPane1.setViewportView(list); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; getContentPane().add(jScrollPane1, gridBagConstraints); pack(); }//  // Variables declaration - do not modify private javax.swing.JLabel jLabel1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JList list; // End of variables declaration public void dragEnter(DropTargetDragEvent arg0) { // nothing } public void dragOver(DropTargetDragEvent arg0) { // nothing } public void dropActionChanged(DropTargetDragEvent arg0) { // nothing } public void dragExit(DropTargetEvent arg0) { // nothing } public void drop(DropTargetDropEvent evt) { int action = evt.getDropAction(); evt.acceptDrop(action); try { Transferable data = evt.getTransferable(); if (data.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { List files = (List) data.getTransferData( DataFlavor.javaFileListFlavor); for (File file : files) { listModel.addElement(file); } } } catch (UnsupportedFlavorException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { evt.dropComplete(true); } } private class FileTransferHandler extends TransferHandler { @Override protected Transferable createTransferable(JComponent c) { JList list = (JList) c; List files = new ArrayList(); for (Object obj: list.getSelectedValues()) { files.add((File)obj); } return new FileTransferable(files); } @Override public int getSourceActions(JComponent c) { return MOVE; } } private class FileTransferable implements Transferable { private List files; public FileTransferable(List files) { this.files = files; } public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[]{DataFlavor.javaFileListFlavor}; } public boolean isDataFlavorSupported(DataFlavor flavor) { return flavor.equals(DataFlavor.javaFileListFlavor); } public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { if (!isDataFlavorSupported(flavor)) { throw new UnsupportedFlavorException(flavor); } return files; } } }