Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [Java] drag & drop di immagini

    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...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [Java] drag & drop di immagini

    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.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    Re: Re: [Java] drag & drop di immagini

    Originariamente inviato da andbin
    Prova questo programmino che ho appena scritto...
    AndBin grande!!! io girando in rete ho trovato degli esempi basati su stringhe e li ho applicati in modo che sembra stia trasferendo l'immagine ma alla fine draggo e droppo il percorso dell'immagine, quindi String, e lo applico alla JLabel di destinazione...comunque grazie 1000 per l'aiuto...

  4. #4
    AndBin 1 domanda: tu hai scritto prima che in JLabel (così come negli altri JComponent) tutto ciò che ha una set e una get è una proprietà, quindi Background, Foreground, Size, Location, ecc...
    Ora con il tuo esempio ho testato le seguenti proprietà:
    -background;
    -foreground;
    -icon;
    -border;
    -location;
    -size;
    Ma non capisco perchè con le ultime due non mi funziona....secondo te come mai?

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da hellmarvel
    -location;
    -size;
    Ma non capisco perchè con le ultime due non mi funziona....secondo te come mai?
    Se viene usato un layout manager (nel mio esempio è BorderLayout, che è il default per il content pane del JFrame) è lui a stabilire posizione/dimensione dei componenti. Invocare setLocation() o setSize() su un componente non hanno quindi effetto. Dovresti togliere il layout manager ma a quel punto devi impostare per forza posizione/dimensione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Si infatti è così che ho agito... ho impostato il layout a null e ho assegnato location e size attraverso le coordinate...però provando queste due proprietà non mi funziona può darsi che il listener funzioni solo su determinate proprietà?

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da hellmarvel
    Si infatti è così che ho agito... ho impostato il layout a null e ho assegnato location e size attraverso le coordinate...però provando queste due proprietà non mi funziona può darsi che il listener funzioni solo su determinate proprietà?
    TransferHandler funziona con le proprietà che rispecchiano le specifiche JavaBeans. E setLocation/setSize non sono "proprietà" JavaBeans in quel senso. E lo vedi subito ... perché hanno 2 parametri.

    http://java.sun.com/javase/6/docs/te...ans/index.html
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Ho imparato qualcosa [citaz] cmq grazie mille per l'aiuto...

  9. #9
    @hellmarvel potresti postare il codice con cui passi il path dell immagine e la rendi Jlabel?

  10. #10
    Ciao claujava, il codice di cui parli non l'ho poi più utilizzato quindi ora non ricordo come si fa...ricordo che avevo fatto delle ricerche su google e l'avevo trovato li...prova a cercare anche nei siti inglesi...
    Tieni presente che se a te serve codice per fare drag & drop di immagini da JLabel, puoi anche utilizzare il codice postato sopra...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.