Mit der Java Drag and Drop können User bequem ihre Dateien und Links auf dem Monitor verschieben. Der Programmierer muss dieses Event jedoch davor programmieren und die Dateien anschließend auswerten. Hier kann dieser verschieden Dateiformate zulassen oder auch sperren. Im folgenden Quellcode wird gezeigt, wie Datei-Namen von Java mit Drag and Drop eingelesen werden.
Im Anschluss werden die Dateien einzeln im jeweiligen Betriebssystem Standardprogramm geöffnet. Wenn es hierfür kein Programm gibt wird Java Fehler (Exception) ausgelöst.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
import java.awt.Color; import java.awt.Component; import java.awt.Desktop; import java.awt.Dimension; import java.awt.Font; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; 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.util.ArrayList; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.SpringLayout; import javax.swing.SwingConstants; import javax.swing.border.LineBorder; /** * @author Stefan, https://st-page.de * */ public class DragAndDrop extends JFrame { private static final long serialVersionUID = 1L; public DragAndDrop() { setSize(new Dimension(691, 363)); setPreferredSize(new Dimension(300, 200)); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("Java Drag And Drop"); SpringLayout springLayout = new SpringLayout(); getContentPane().setLayout(springLayout); JLabel lblDraganddrop = new JLabel("Drag And Drop"); springLayout.putConstraint(SpringLayout.NORTH, lblDraganddrop, 10, SpringLayout.NORTH, getContentPane()); springLayout.putConstraint(SpringLayout.WEST, lblDraganddrop, 10, SpringLayout.WEST, getContentPane()); springLayout.putConstraint(SpringLayout.SOUTH, lblDraganddrop, 315, SpringLayout.NORTH, getContentPane()); springLayout.putConstraint(SpringLayout.EAST, lblDraganddrop, -10, SpringLayout.EAST, getContentPane()); lblDraganddrop.setHorizontalTextPosition(SwingConstants.CENTER); lblDraganddrop.setHorizontalAlignment(SwingConstants.CENTER); lblDraganddrop.setBorder(new LineBorder(new Color(0, 0, 0))); lblDraganddrop.setAlignmentX(Component.CENTER_ALIGNMENT); lblDraganddrop.setVerticalAlignment(SwingConstants.CENTER); lblDraganddrop.setVerticalTextPosition(SwingConstants.CENTER); lblDraganddrop.setFont(new Font("Tahoma", Font.PLAIN, 48)); getContentPane().add(lblDraganddrop); setVisible(true); new DropTarget(lblDraganddrop, new DropTargetListener() { @Override public void drop(DropTargetDropEvent dtde) { try { Transferable tr = dtde.getTransferable(); DataFlavor[] flavors = tr.getTransferDataFlavors(); ArrayList<File> fileNames = new ArrayList<File>(); for (int i = 0; i < flavors.length; i++) { if (flavors[i].isFlavorJavaFileListType()) { dtde.acceptDrop(dtde.getDropAction()); @SuppressWarnings("unchecked") java.util.List<File> files = (java.util.List<File>) tr.getTransferData(flavors[i]); for (int k = 0; k < files.size(); k++) { fileNames.add(files.get(k)); // Die Dateien werden mit dem spezifischen Programm geöffnet. Desktop.getDesktop().open(files.get(k)); // Der Dateiname wird in der Comandozeile ausgegeben. System.out.println(files.get(k)); } dtde.dropComplete(true); } } return; } catch (Throwable t) { t.printStackTrace(); } dtde.rejectDrop(); } @Override public void dragEnter(DropTargetDragEvent dtde) {} @Override public void dragOver(DropTargetDragEvent dtde) {} @Override public void dropActionChanged(DropTargetDragEvent dtde) {} @Override public void dragExit(DropTargetEvent dte) {} }); } /** * Hier wird das Programm ohne weitere Argumente gestartet. * @param args */ public static void main(String[] args) { new DragAndDrop(); } } |