// Create two JLabel objects
final JLabel label1 = new JLabel("Drag here");
JLabel label2 = new JLabel("Drop here");
// Register TransferHandler objects on them: label1 transfers its
// foreground color and label2 transfers its background color.
label1.setTransferHandler(new TransferHandler("foreground"));
label2.setTransferHandler(new TransferHandler("background"));
// Give label1 a foreground color other than the default
// Make label2 opaque so it displays its background color
label1.setForeground(new Color(100, 100, 200));
label2.setOpaque(true);
// Now look for drag gestures over label1. When one occurs,
// tell the TransferHandler to begin a drag.
// Exercise: modify this gesture recognition so that the drag doesn't
// begin until the mouse has moved 4 pixels. This helps to keep
// drags distinct from sloppy clicks. To do this, you'll need both
// a MouseListener and a MouseMotionListener.
label1.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
TransferHandler handler = label1.getTransferHandler();
handler.exportAsDrag(label1, e, TransferHandler.COPY);
}
});
// Create a window, add the labels, and make it all visible.
JFrame f = new JFrame("ColorDrag");
f.getContentPane().setLayout(new FlowLayout());
f.getContentPane().add(label1);
f.getContentPane().add(label2);
f.pack();
f.setVisible(true);