JTable - glisser et déposer

OK, ce problème est hors de ma ligue. Je suis en train de mettre en œuvre une interface graphique widget de swing qui permet aux fichiers d'être tombé sur une JTable, et permet de les lignes de la JTable, traîné pour re-trier. Pensez VLC listes de lecture, ou l'un dans iTunes.

J'ai déposer des fichiers à partir du système d'exploitation (Explorer, Finder, etc.) fonctionne très bien, mais je vais avoir un impossible de temps à ré-organiser les lignes de la table, une fois que les fichiers sont en. Le problème est que lorsque j'ajoute une coutume TransferHandler à la table, en faisant glisser de la table est tué sur le coup. Voici un exemple de code:

import javax.swing.*;

public class TableTest
{
    public static void main (String [] argv)
    {
        //setup table data
        String [] columns = new String [] {"Foo", "Bar", "Baz", "Quux"};
        String [][] data = new String [][] {{"A", "B", "C", "D"},
                        {"1", "2", "3", "4"},
                        {"i", "ii", "iii", "iv"}};
        //create table
        JTable table = new JTable(data, columns);

        //set up drag and drop
        table.setDragEnabled(true);
        table.setDropMode(DropMode.INSERT_ROWS);
        table.setFillsViewportHeight(true);
        TransferHandler dnd = new TransferHandler() {
            //here be code to handle drops, and one would
            //presume drag exporting, too
        };
        table.setTransferHandler(dnd);
        JScrollPane scroll = new JScrollPane(table);

        //create and show window
        JFrame window = new JFrame();
        window.getContentPane().add(scroll);
        window.pack();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setVisible(true);
    }
}

D'exécuter ce code et vous verrez que vous ne pouvez pas lancer un glisser sur la table.Si vous en commentaire l'appel à setTransferHandler() sur la table, en faisant glisser les œuvres (c'est à dire, quand j'ai commencer à faire glisser une ligne de la table, j'ai le X une suite curseur de cercle en disant que je ne peut pas laisser tomber). Mais dès qu'un TransferHandler est défini pour la table, je ne peux pas faire glisser les lignes. Le problème doit être dans le TransferHandler, mais j'ai complètement dépannés et débogué, et ont déterminé que le déplacement n'a jamais commencé une fois il y a un TransferHandler sur la table. Ce que je fais mal?

source d'informationauteur stdave