The Artima Developer Community
Sponsored Link

Legacy Java Answers Forum
April 2001

Advertisement

Advertisement

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:

Sponsored Links



Google
  Web Artima.com   
Copyright © 1996-2009 Artima, Inc. All Rights Reserved. - Privacy Policy - Terms of Use - Advertise with Us