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