This page contains an archived post to the Java Answers Forum made prior to February 25, 2002.
If you wish to participate in discussions, please visit the new
Artima Forums.
Message:
drag and drop of images in an applet
Posted by Vidya Setlur on June 14, 2001 at 7:11 PM
Hi, I have been trying to implement drag and drop of images in an applet. I basically am trying to drag images from a JList and put them on a JPanel. The problem with it is that, the drop methods never get invoked. Only the startDrag event is invoked when an image is dragged but I can't drop it in the panel. Here is the code: import javax.swing.event.*; import java.awt.event.*; import javax.swing.*; import java.awt.*; import java.io.*; import java.applet.*; import java.awt.datatransfer.*; import java.awt.dnd.*; public class dndApplet extends JApplet implements Runnable { private DragContainer dragcontainer; private DropContainer dropcontainer; private DefaultListModel listModel; public void start() { Thread kicker = new Thread(this); kicker.start(); } public void run() { dndApplet dndapplet = new dndApplet(); dndapplet.init(); } public void init() { try { getContentPane().setLayout(new BorderLayout()); listModel = new DefaultListModel(); dragcontainer = new DragContainer(listModel); getContentPane().add(BorderLayout.EAST, new JScrollPane(dragcontainer)); dropcontainer = new DropContainer(); getContentPane().add(BorderLayout.CENTER,dropcontainer); } catch (Exception e) { System.out.println("error"); } fillUpList("c:\\dnd\\images"); setSize(700,300); } public static void main(String[] args) { Frame f = new Frame("dndframe"); dndApplet dndapplet = new dndApplet(); dndapplet.init(); dndapplet.start(); f.show(); } private void fillUpList(String directory) { File dir = new File(directory); File[] files = dir.listFiles(); for (int i= 0; i listModel.addElement(new ImageIcon(directory + "\\" + files[i].getName())); } } } class ImageSelection implements Transferable, Serializable { public DataFlavor[] getTransferDataFlavors() { DataFlavor[] supported = new DataFlavor[1]; supported[0] = new DataFlavor(getClass(),"SelectedImage"); System.out.println(supported); return supported; } public Object getTransferData(DataFlavor f) throws UnsupportedFlavorException { return this; } public boolean isDataFlavorSupported(DataFlavor aFlavor) { return aFlavor.equals(new DataFlavor(getClass(),"SelectedImage")); } } class DragContainer extends JList implements DragGestureListener, DragSourceListener { private DragSource iDragSource = null; DataFlavor DATA_FLAVOR; public DragContainer(ListModel lm) { super(lm);
try { DATA_FLAVOR = new DataFlavor(ImageIcon.class,"SelectedImage"); } catch (Exception e) { System.out.println("Error in dataflavor for dragcontainer"); } iDragSource = new DragSource(); iDragSource.createDefaultDragGestureRecognizer(this,DnDConstants.ACTION_MOVE, this); } public void dragGestureRecognized(DragGestureEvent aEvt) { ImageIcon imageSelected = (ImageIcon) getSelectedValue(); ImageSelection imsel = new ImageSelection(); if (imageSelected != null) { System.out.println("startdrag..."); iDragSource.startDrag(aEvt,DragSource.DefaultCopyNoDrop,imsel,this); } else System.out.println("Nothing Selected"); } public void dropActionChanged(DropTargetDragEvent event) { } public void dropActionChanged(DragSourceDragEvent event) { } public void dragDropEnd(DragSourceDropEvent event) { } public void dragEnter(DragSourceDragEvent event) { } public void dragExit (DragSourceEvent event) { } public void dragOver(DragSourceDragEvent event) { DragSourceContext context = event.getDragSourceContext(); context.setCursor(null); context.setCursor(DragSource.DefaultCopyDrop); } } class DropContainer extends JPanel implements DropTargetListener { private DropTarget iDropTarget = null; public DropContainer() { iDropTarget = new DropTarget(this,this); setBackground(Color.red); }
public void dragEnter (DropTargetDragEvent event) { System.out.println("dragenter"); event.acceptDrag(DnDConstants.ACTION_MOVE); } public void dragExit(DropTargetEvent event) { System.out.println("dragexit"); } public void dragOver (DropTargetDragEvent event) { System.out.println("dragover"); event.acceptDrag(DnDConstants.ACTION_COPY); } public void dropActionChanged (DropTargetDragEvent event) { System.out.println("dropactionchanged"); event.acceptDrag(DnDConstants.ACTION_COPY); } public void drop(DropTargetDropEvent aEvt) { System.out.println("drop"); try { Transferable transferable = aEvt.getTransferable(); DataFlavor aliFlavor = new DataFlavor(getClass(),"Selected Image"); System.out.println(aliFlavor); if (transferable.isDataFlavorSupported(aliFlavor)) { aEvt.acceptDrop(DnDConstants.ACTION_MOVE); ImageIcon icon = (ImageIcon)transferable.getTransferData(aliFlavor); aEvt.getDropTargetContext().dropComplete(true); } else { System.out.println("rejecting drop"); aEvt.rejectDrop(); aEvt.getDropTargetContext().dropComplete(false); } } catch (Exception exc) { exc.printStackTrace(); aEvt.rejectDrop(); aEvt.getDropTargetContext().dropComplete(false); } } }//class DropContainer
Replies:
|