Drag and drop utilizando transferhandler

Olá galera, o meu programa abaixo ele cria 3 imagens e permite que você arraste uma em cima da outra, substituindo a imagem do local aonde foi arrastado pela imagem que você arrastou.
Gostaria de saber como trocar as imagens ao invés de substituir. Por exemplo: Se eu arrasto a imagem java1 para a java2, eu não quero apenas que a imagem java2 vire a imagem java1, mas que java1 também virasse java2, espero não ter ficado muito confuso. Agradeço desde já.

[code]import java.awt.FlowLayout;
import javax.swing.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class DragAndDrop extends JFrame{
JLabel pic1, pic2, pic3;

public DragAndDrop(){
    super("Drag and Drop Images");
    pic1 = new JLabel();
    pic2 = new JLabel();
    pic3 = new JLabel();
    pic1.setBounds(20,30,120,120);
    pic2.setBounds(250,30,120,120);
    pic3.setBounds(20,140,120, 120);
    pic1.setIcon(new ImageIcon("C:\\Users\\Usori\\Desktop\\Java1.png"));
    pic2.setIcon(new ImageIcon("C:\\Users\\Usori\\Desktop\\Java2.png"));
    pic3.setIcon(new ImageIcon("C:\\Users\\Usori\\Desktop\\Java2.png"));
    
    MouseListener m1 = new MouseListener() {

        @Override
        public void mouseClicked(MouseEvent e) {}

        @Override
        public void mousePressed(MouseEvent x) {
  
        JComponent jc = (JComponent)x.getSource();
        TransferHandler th = jc.getTransferHandler();
        th.exportAsDrag(jc, x, TransferHandler.COPY);
       

              
            
        }
        
        @Override
        public void mouseReleased(MouseEvent e) {}

        @Override
        public void mouseEntered(MouseEvent e) {}

        @Override
        public void mouseExited(MouseEvent e) {}
    };
    
    pic1.addMouseListener(m1);
    pic2.addMouseListener(m1);
    pic3.addMouseListener(m1);
    

    
    pic1.setTransferHandler(new TransferHandler("icon"));
    pic2.setTransferHandler(new TransferHandler("icon"));
    pic3.setTransferHandler(new TransferHandler("icon"));
    
    add(pic1);
    add(pic2);
    add(pic3);
    
    setLayout(new FlowLayout());
    setSize(500,500);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setVisible(true);
    
    
    
}

public static void main(String[] args) {
    
    new DragAndDrop();
    
    
    
}

}[/code]