从Jtree显示的文件拖放到本地应用程序,让基打开被拖动的文件
 各位大哥那个 dropTarget 可不可以定义本地任意的应用程序. 
  麻烦各位大哥指引指引,  在此先谢了!

解决方案 »

  1.   

    给你个例子吧。import java.awt.Font;
    import java.awt.datatransfer.DataFlavor;
    import java.awt.datatransfer.Transferable;
    import java.awt.dnd.DnDConstants;
    import java.awt.dnd.DragGestureEvent;
    import java.awt.dnd.DragGestureListener;
    import java.awt.dnd.DragSource;
    import java.awt.dnd.DragSourceDragEvent;
    import java.awt.dnd.DragSourceDropEvent;
    import java.awt.dnd.DragSourceEvent;
    import java.awt.dnd.DragSourceListener;
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.util.Iterator;import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.UIManager;public class JLabelDragSource implements DragGestureListener,
    DragSourceListener {
    public JLabelDragSource(JLabel label) {
    this.label = label; // Use the default DragSource
    DragSource dragSource = DragSource.getDefaultDragSource(); // Create a DragGestureRecognizer and
    // register as the listener
    dragSource.createDefaultDragGestureRecognizer(label,
    DnDConstants.ACTION_COPY_OR_MOVE, this);
    } // Implementation of DragGestureListener interface.
    public void dragGestureRecognized(DragGestureEvent dge) {
    if (DnDUtils.isDebugEnabled()) {
    DnDUtils.debugPrintln("Initiating event is "
    + dge.getTriggerEvent());
    DnDUtils.debugPrintln("Complete event set is:");
    Iterator iter = dge.iterator();
    while (iter.hasNext()) {
    DnDUtils.debugPrintln("\t" + iter.next());
    }
    }
    Transferable transferable = new JLabelTransferable(label);
    dge.startDrag(null, transferable, this);
    } // Implementation of DragSourceListener interface
    public void dragEnter(DragSourceDragEvent dsde) {
    DnDUtils.debugPrintln("Drag Source: dragEnter, drop action = "
    + DnDUtils.showActions(dsde.getDropAction()));
    } public void dragOver(DragSourceDragEvent dsde) {
    DnDUtils.debugPrintln("Drag Source: dragOver, drop action = "
    + DnDUtils.showActions(dsde.getDropAction()));
    } public void dragExit(DragSourceEvent dse) {
    DnDUtils.debugPrintln("Drag Source: dragExit");
    } public void dropActionChanged(DragSourceDragEvent dsde) {
    DnDUtils.debugPrintln("Drag Source: dropActionChanged, drop action = "
    + DnDUtils.showActions(dsde.getDropAction()));
    } public void dragDropEnd(DragSourceDropEvent dsde) {
    DnDUtils.debugPrintln("Drag Source: drop completed, drop action = "
    + DnDUtils.showActions(dsde.getDropAction()) + ", success: "
    + dsde.getDropSuccess());
    } public static void main(String[] args) {
    try {
    UIManager
    .setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
    } catch (Exception evt) {
    } JFrame f = new JFrame("Draggable JLabel");
    JLabel label = new JLabel("Drag this text", JLabel.CENTER);
    label.setFont(new Font("Serif", Font.BOLD, 32));
    f.getContentPane().add(label);
    f.pack();
    f.setVisible(true); // Attach the drag source
    @SuppressWarnings("unused")
    JLabelDragSource dragSource = new JLabelDragSource(label);
    } protected JLabel label; // The associated JLabel
    }class DnDUtils2 {
    public static String showActions(int action) {
    String actions = "";
    if ((action & (DnDConstants.ACTION_LINK | DnDConstants.ACTION_COPY_OR_MOVE)) == 0) {
    return "None";
    } if ((action & DnDConstants.ACTION_COPY) != 0) {
    actions += "Copy ";
    } if ((action & DnDConstants.ACTION_MOVE) != 0) {
    actions += "Move ";
    } if ((action & DnDConstants.ACTION_LINK) != 0) {
    actions += "Link";
    } return actions;
    } public static boolean isDebugEnabled() {
    return debugEnabled;
    } public static void debugPrintln(String s) {
    if (debugEnabled) {
    System.out.println(s);
    }
    } private static boolean debugEnabled = (System
    .getProperty("DnDExamples.debug") != null);
    }class JLabelTransferable implements Transferable {
    public JLabelTransferable(JLabel label) {
    this.label = label;
    } // Implementation of the Transferable interface
    public DataFlavor[] getTransferDataFlavors() {
    return flavors;
    } public boolean isDataFlavorSupported(DataFlavor fl) {
    for (int i = 0; i < flavors.length; i++) {
    if (fl.equals(flavors[i])) {
    return true;
    }
    } return false;
    } public Object getTransferData(DataFlavor fl) {
    if (!isDataFlavorSupported(fl)) {
    return null;
    } if (fl.equals(DataFlavor.stringFlavor)) {
    // String - return the text as a String
    return label.getText() + " (DataFlavor.stringFlavor)";
    } else if (fl.equals(jLabelFlavor)) {
    // The JLabel itself - just return the label.
    return label;
    } else {
    // Plain text - return an InputStream
    try {
    String targetText = label.getText() + " (plain text flavor)";
    int length = targetText.length();
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    OutputStreamWriter w = new OutputStreamWriter(os);
    w.write(targetText, 0, length);
    w.flush();
    byte[] bytes = os.toByteArray();
    w.close();
    return new ByteArrayInputStream(bytes);
    } catch (IOException e) {
    return null;
    }
    }
    } // A flavor that transfers a copy of the JLabel
    public static final DataFlavor jLabelFlavor = new DataFlavor(JLabel.class,
    "Swing JLabel"); private JLabel label; // The label being transferred private static final DataFlavor[] flavors = new DataFlavor[] {
    DataFlavor.stringFlavor,
    new DataFlavor("text/plain; charset=ascii", "ASCII text"),
    jLabelFlavor };
    }