OK、この問題は私のリーグ外です。ファイルをJTableにドロップし、JTableの行をドラッグして並べ替えることができるGUIウィジェットをswingで実装しようとしています。VLCのプレイリストまたはiTunesのプレイリストを考えてみてください。
OS(Explorer、Finderなど)からファイルをドロップしても問題なく動作しましたが、ファイルが入った後、テーブルの行を再配置するのに不可能な時間があります。問題は、追加するときにカスタムTransferHandlerをテーブルにドラッグすると、テーブルからのドラッグは即座に強制終了されます。次にいくつかのサンプルコードを示します。
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);
}
}
このコードをそのまま実行すると、テーブルでドラッグを開始できないことがわかります。テーブルでsetTransferHandler()の呼び出しをコメントアウトすると、ドラッグが機能します(つまり、テーブル行のドラッグを開始すると、次のようになります。 Xは、そこにドロップできないことを示す円カーソルを出力します)。しかし、TransferHandlerがテーブルに設定されるとすぐに、行をドラッグできなくなります。問題はTransferHandlerにある必要がありますが、徹底的にトラブルシューティングしてデバッグし、テーブルにTransferHandlerがあるとドラッグが開始されないことを確認しました。私は何が間違っているのですか?