import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class LabelDemo 
{
  public static void main(String[] args)
  {
    JFrame f = new JFrame("Drag-and-Drop to/from the JLabel");
    f.setSize(640,480);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    JPanel cp = (JPanel)f.getContentPane();
    cp.setLayout(new BorderLayout());
    
    
    JTextField field = new JTextField("[Type, drag or drop text here]");
    field.setDragEnabled(true);
    cp.add(field, BorderLayout.NORTH);
    
    JLabel label = new JLabel("[Drag or drop text here]", SwingConstants.CENTER);
    cp.add(label, BorderLayout.CENTER);
//[drop
    // Use a bean-oriented handler for objects with a text property
    // (i.e., with getText() and setText() methods)
    label.setTransferHandler(new TransferHandler("text"));
//]drop

//[drag
    label.addMouseListener(
        new MouseAdapter()
        // An anonymous inner class that overrides mousePressed() in MouseAdapter
        {
          public void mousePressed(MouseEvent e) 
          {
            JComponent c = (JComponent)e.getSource();
            TransferHandler handler = c.getTransferHandler();
            handler.exportAsDrag(c, e, TransferHandler.COPY);
          }
        }
    );
//]drag
    f.setVisible(true);
  }
}
