Originariamente inviato da hellmarvel
Ho fatto svariate ricerche ma ho trovato sempre drag & drop riferito a String...a me interesserebbe fare il drag & drop di un'immagine da una JLabel ad un'altra...
Le classi per effettuare il drag & drop sono semplici da capire...il mio problema è il trasferimento dell'immagine...

qualcuno può aiutarmi? sono disperato...
Prova questo programmino che ho appena scritto:
codice:
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import javax.swing.*;
public class TestFrame extends JFrame
{
private ImageIcon icon;
private JLabel label1;
private JLabel label2;
public TestFrame ()
{
super ("Test Frame");
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setSize (300, 300);
try {
icon = new ImageIcon (new URL ("http://img383.imageshack.us/img383/4245/iconwink5sx.gif"));
} catch (Exception e) {
System.out.println (e);
}
label1 = new JLabel ("Label1", icon, SwingConstants.CENTER);
label2 = new JLabel ("Label2", SwingConstants.CENTER);
MouseListener mouseListener = new MouseAdapter ()
{
public void mousePressed (MouseEvent me)
{
JComponent comp = (JComponent) me.getSource ();
TransferHandler handler = comp.getTransferHandler ();
handler.exportAsDrag (comp, me, TransferHandler.COPY);
}
};
label1.setTransferHandler (new TransferHandler ("icon"));
label2.setTransferHandler (new TransferHandler ("icon"));
label1.addMouseListener (mouseListener);
label2.addMouseListener (mouseListener);
getContentPane ().add (label1, BorderLayout.NORTH);
getContentPane ().add (label2, BorderLayout.SOUTH);
}
public static void main (String[] args) throws Exception
{
SwingUtilities.invokeLater (new Runnable ()
{
public void run ()
{
TestFrame f = new TestFrame ();
f.setVisible (true);
}
});
}
}
Ci sono 2 JLabel, una nella parte NORTH e l'altra nella parte SOUTH. Se la immagine viene correttamente caricata, la label1 dovrebbe avere una faccina come icona. Clicca su label1 e trascina sulla label2. Vedrai che la icona viene trasferita (copiata) sulla label2.
L'uso di TransferHandler è abbastanza semplice: permette di trasferire una "proprietà" di un componente. E per proprietà si intende secondo le specifiche JavaBeans. JLabel ha un getIcon() e un setIcon(), quindi ha una proprietà è "icon".
L'unica particolarità è che bisogna gestire un MouseListener per far "partire" il drag.
Può darsi che non sia esattamente quello di cui hai bisogno. Comunque può essere una base di partenza.