Lorsque Finder de Mac, Explorer de Windows a fait glisser & déposer d'un élément spécifique dans l'application Swing à un bureau et un dossier, Comment obtenir l'ancien chemin qui J'ai abandonné? Je suis heureux d'apprendre une classe et une méthode nécessaires.Swing application -> Glisser & déposer sur le bureau/dossier
Répondre
Ceci est une applet, mais il fonctionne avec tout cadre ou fenêtre:
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<File> list = (List<File>) 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<File> files) throws IOException {
// . . .
}
}
Faire glisser des fichiers à partir d'une application Swing sur le bureau est un peu plus compliqué, et tous les composants Swing sont capables de le faire.
Voici un exemple avec un JList contenant des fichiers. Vous pouvez déposer des fichiers du Finder/Explorer dans cette liste, puis faire glisser ces fichiers vers un autre emplacement.
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")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
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();
}// </editor-fold>
// 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<File> files = (List<File>) 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<File> files = new ArrayList<File>();
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<File> files;
public FileTransferable(List<File> 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;
}
}
}
Merci beaucoup. Puis-je faire glisser de Swing App à l'explorateur? – freddiefujiwara
Ajout d'un exemple qui fait les deux –
Je travaille actuellement sur des trucs DnD. Curieux de savoir s'il y a une raison pour laquelle vous avez utilisé les trucs AWT au lieu de Swing, c'est-à-dire TransferHandler, TransferSupport, etc. –
- 1. des informations sur le glisser & déposer!
- 2. Glisser-déposer
- 3. Application glisser-déposer inter-applications dans Delphi
- 4. Redessiner pendant le glisser-déposer
- 5. Flex 3.0 Glisser-Déposer
- 6. Simulation par glisser-déposer?
- 7. iPhone glisser/déposer
- 8. Glisser/Déposer dans une application ET dans une autre application
- 9. WinForms Interop, glisser-déposer à partir de WinForms -> WPF
- 10. jquery glisser et déposer
- 11. Implémenter le glisser-déposer sur le bureau à partir d'une application .net winforms?
- 12. C# glisser-déposer PropertyGrid
- 13. désactiver le glisser-déposer de texte
- 14. jquery glisser et déposer
- 15. Comment désactiver le glisser-déposer pour NSTextField?
- 16. glisser-déposer des options
- 17. jquery glisser-déposer clone
- 18. glisser-déposer, les éditeurs
- 19. Glisser-déposer modifie le conteneur WinForm en lecture seule (plus d'autres particularités de glisser-déposer)
- 20. Flex :: Comment éviter le glisser-déposer, en le faisant glisser sur soi-même
- 21. Contrôle glisser-déposer pour Silverlight
- 22. Glisser-déposer dans le canvas mozilla
- 23. Silverlight Toolkit TreeView Glisser-Déposer
- 24. Adobe Flash - Glisser & déposer movieClips
- 25. Glisser et déposer une carte
- 26. flex: problème de glisser-déposer
- 27. annexant dernier nœud glisser-déposer
- 28. Flash glisser et déposer l'uploader?
- 29. Faites glisser et déposer des commentaires dans un JTree avec TreeCellRenderer personnalisé (Java, Swing)
- 30. Faites glisser et déposer dans winapi
Veuillez préciser «l'ancien passage». –
Quoi de neuf? l'ancien col ?? – freddiefujiwara