ОК, эта проблема выходит за рамки моей лиги. Я пытаюсь реализовать GUI-виджет на качелях, который позволяет перетаскивать файлы на JTable и позволяет перетаскивать строки JTable для повторной сортировки. Вспомните плейлисты VLC или плейлисты в iTunes.
У меня сбрасываются файлы из ОС (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. Что я делаю не так?