java : Drag & Drop sur un JTable

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 :

  1. Il faut que le composant puisse être pris (drag) et/ou déposé (drop)
  2. Il faut convertir le composant en donnée exportable et transportable (Transferable)
  3. 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 » :

Tableau DND java

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 Appuyez sur le "bouton" vert et glissez la ligne vers le haut ou le bas ... (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 ?

  1. puisque mais il y a sinon cela ne serait pas marrant

Similar Posts:

    None Found