Partage
  • Partager sur Facebook
  • Partager sur Twitter

Drag &Drop

JTable vers JLabel

    20 mai 2009 à 15:21:54

    Salut à tous,

    Dans le cadre de mes études je réalise un lecteur multimédia en Java du style de Windows Média Player ou iTunes par exemple.
    J'aimerais cependant y ajouter du drag and drop pour déplacer les musiques depuis un JTable vers des JLabel qui représente mes playlists.

    Pour ce faire, je crée mes labels et leur attribue un TransferHandler:

    monMabel.setTransferHandler(new MyTransferHandler());
    


    Ensuite voici, ma classe MyTransferHandler:

    import java.awt.datatransfer.DataFlavor;
    import java.awt.datatransfer.Transferable;
    import javax.swing.JComponent;
    import javax.swing.JLabel;
    import javax.swing.JTable;
    import javax.swing.TransferHandler;
    
    public class MyTransferHandler extends TransferHandler {
    
            public MyTransferHandler(){
                //Rien
            }
    
            @Override
            public boolean canImport(JComponent cp, DataFlavor[] df) {
                for (int i = 0; i < df.length; i++) {
                    if (df[i].equals(DataFlavor.stringFlavor)) {
                        return true;
                    }
                }
                    return false;
            }
    
    
            @Override
            public boolean importData(JComponent comp, Transferable t){
                String[] tabCaractere;
                int indice;
                try {
                    Object myObject = t.getTransferData(DataFlavor.stringFlavor);
                    String value = (String)myObject;
                    int i = 0;
                    tabCaractere = value.split("\\s");
                    indice = Integer.parseInt(tabCaractere[0]);//Indice de la chanson
    
                    //Il me manque l'indice de la playlist
    
                    //Requete d'insertion dans la playlist!!
                    String requete = "INSERT INTO chans_play" +
                            "           VALUES (" + indice + ",";
                    return true;
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return false;
            }
    }
    


    Mon probleme, pour la méthode importData, il faudrait que j'arrive à savoir sur quel JLabel ont été déposé les données. Je devrais surement pouvoir le savoir avec le JComponent que je reçois mais je n'y arrive pas.

    Merci d'avance à tous, pour votre aide !!
    • Partager sur Facebook
    • Partager sur Twitter
      23 mai 2009 à 11:15:06

      Vous êtes sûr que vous ne savez pas?

      De mon côté, j'ai beau cherché, je n'y arrive toujours pas...
      • Partager sur Facebook
      • Partager sur Twitter
        23 mai 2009 à 11:23:23

        Alors ça c'est pour le drag :
        // Create a label
            JLabel label = new JLabel("Label Text");
            
            // Specify that the label's text property be transferable; the value of
            // this property will be used in any drag-and-drop involving this label
            final String propertyName = "text";
            label.setTransferHandler(new TransferHandler(propertyName));
            
            // Listen for mouse clicks
            label.addMouseListener(new MouseAdapter() {
                public void mousePressed(MouseEvent evt) {
                    JComponent comp = (JComponent)evt.getSource();
                    TransferHandler th = comp.getTransferHandler();
            
                    // Start the drag operation
                    th.exportAsDrag(comp, evt, TransferHandler.COPY);
                }
            });
        


        Et ça pour le drop :
        //The drop target in this example only accepts dropped String objects. A drop target must implement DropTargetListener and supply an implementation for drop().
        
            public void drop(DropTargetDropEvent evt) {
                try {
                    Transferable t = evt.getTransferable();
            
                    if (t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
                        evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
                        String s = (String)t.getTransferData(DataFlavor.stringFlavor);
                        evt.getDropTargetContext().dropComplete(true);
                        process(s);
                    } else {
                        evt.rejectDrop();
                    }
                } catch (IOException e) {
                    evt.rejectDrop();
                } catch (UnsupportedFlavorException e) {
                    evt.rejectDrop();
                }
            }
        

        Au passage, j'ai juste copié-collé ces codes depuis exampledepot.com mais normalement avec quelques bidouilles ça devrait fonctionner.
        • Partager sur Facebook
        • Partager sur Twitter

        Drag &Drop

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown