Drag & Drop sur un JTable
Dans nos application moderne il semble logique de pouvoir faire du DND à gogo, pourtant ce n’est pas des plus simple, avec certain langage de le faire, d’où cette exemple qui m’a fait un peu travaillez et arrachez un ou deux cheveux de ma longue chevelure de geek…
Bref, voici l’essentiel :
- Il faut que le composant puisse être pris (drag) et/ou déposé (drop)
- Il faut convertir le composant en donnée exportable et transportable (Transferable)
- Il faut pouvoir restaurer les donnée correctement et suivant le type les restaurer de tel ou tel manière …
Par défaut, java implémente tout une série de composant déjà « drag&drop ready » :
Dans notre cas le JTable peut-être pris par copie mais on ne peux droper dedans…
Donc nous devons géré :
- Transport des données : ici nos lignes → Class JTableRowTransferable
- Faire en sorte que le gestionnaire de DND accepte le drop et surtout l’accepte de notre transport de donnée → Class MyTransferHandler (class interne)
- Et bien entendu faire comprendre à notre Jtable → il suffit de faire myJtable.setDragEnable(true); 😉
Une fois tout cela fait je me suis vite rendu compte que pour l’utilisateur ce n’était pas simple!!! En fait, l’utilisateur devait sélectionner la ligne (et pas plusieurs) et ensuite légèrement décalé sur le coté (pour ne pas partir vers la sélection d’autre ligne) et puis seulement bouger le tout … INGÉRABLE ! Bref, je me suis dit « let’s go pour un bouton de drague drag! » J’ai donc chercher avec un JButton. Mais1 malheureusement pour utiliser un JButton il faudrait implémenter un render (une class qui dit comment doit s’afficher un objet dans une JTable) pour la JTable. Donc on oublie!
Pour finir, je me suis rabattu vers une ImageIcon (ou rien du tout cela aurait été pareil…) et un MouseListener sur mon JTable.
Bref, je ne vais pas vous faire un cours, pour cela je vous renvoi plus bas! Donc, je vous propose de télécharger l’exemple : DragTableExample.tar
Plus d’info sur le DND en java ?
- Excellent article sur le fonctionnement du DND : Introduction au Drag and Drop : transfert de données[fr]
- Drag & Drop avec Style et l’API Swing[fr]
- Larticle de sun : Lesson: Drag and Drop and Data Transfer[en]
- Encore un autre très bon article : How to drag and drop with Java 2[en]
- puisque mais il y a sinon cela ne serait pas marrant ↩
Similar Posts:
- None Found