/**
     * Start the drag if the operation is ok. uses java.awt.datatransfer.StringSelection to transfer
     * the label's data
     *
     * @param e the event object
     */
    public void dragGestureRecognized(DragGestureEvent e) {

      // if the action is ok we go ahead
      // otherwise we punt
      System.out.println(e.getDragAction());
      if ((e.getDragAction() & DragLabel.this.dragAction) == 0) return;
      System.out.println("kicking off drag");

      // get the label's text and put it inside a Transferable
      // Transferable transferable = new StringSelection( DragLabel.this.getText() );
      Transferable transferable = new StringTransferable(DragLabel.this.getText());

      // now kick off the drag
      try {
        // initial cursor, transferrable, dsource listener
        e.startDrag(DragSource.DefaultCopyNoDrop, transferable, DragLabel.this.dsListener);

        // or if dragSource is a variable
        // dragSource.startDrag(e, DragSource.DefaultCopyDrop, transferable, dsListener);

        // or if you'd like to use a drag image if supported

        /*
          if(DragSource.isDragImageSupported() )
          // cursor, image, point, transferrable, dsource listener
          e.startDrag(DragSource.DefaultCopyDrop, image, point, transferable, dsListener);
        */

      } catch (InvalidDnDOperationException idoe) {
        System.err.println(idoe);
      }
    }
 @Override
 public void dragGestureRecognized(DragGestureEvent dge) {
   Cursor cursor = null;
   BufferedImage bi = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB);
   paint(bi.getGraphics());
   ImageMover.start(bi, MouseInfo.getPointerInfo().getLocation());
   String s = "[ANDITEM]";
   if (dge.getDragAction() == DnDConstants.ACTION_COPY) {
     cursor = DragSource.DefaultCopyDrop;
   }
   dge.startDrag(
       cursor, new SimpleDragObject.TransferableSimpleDragObject(new SimpleDragObject(s)));
 }