DataFlavors между 2 JTree (Java)

Может ли кто-нибудь помочь мне разрешить DataFlavor из одного дерева в другое? Я следил за несколькими учебными пособиями, и у меня есть перетаскивание, работающее внутри двух деревьев, однако я хотел бы иметь возможность перетаскивать их между ними.

Это та часть, которая вызывает исключение в моем переопределенном методе importData;

try {  
        Transferable t = support.getTransferable();  
        nodes = (MyNode[])t.getTransferData(nodesFlavor);  
} catch(UnsupportedFlavorException ufe) {  
        System.out.println("UnsupportedFlavor: " + ufe.getMessage());  
} catch(java.io.IOException ioe) {  
        System.out.println("I/O error: " + ioe.getMessage());  
}

Исключение:

UnsupportedFlavor: приложение/x-java-jvm-local-objectref

Любая помощь будет принята с благодарностью.

Ваше здоровье,

Шон


person Intern87    schedule 03.08.2011    source источник
comment
Можете ли вы изменить код, чтобы он выводил трассировку стека на UnsupportedFlavorException и публиковал трассировку?   -  person AngerClown    schedule 06.08.2011


Ответы (1)


Вам нужно реализовать пользовательский файл TransferHandler. Из учебника по Java,

Список, таблица и дерево по умолчанию не поддерживают удаление. Причина этого в том, что не существует универсального способа справиться с падением этих компонентов. ... Хотя Swing не может предоставить реализацию по умолчанию для этих компонентов, существует структура для удаления. Вам нужно только предоставить собственный TransferHandler, который управляет фактическим импортом данных».

Если вы экспортируете только имена узлов дерева в виде строк, это должно быть довольно просто. См. остальную часть этого руководства для получения информации о том, как это сделать. Если вы пытаетесь экспортировать объект, вам также потребуется создать собственную реализацию Transferable.

person AngerClown    schedule 03.08.2011
comment
У меня есть собственный класс TransferHandler, и перетаскивание отлично работает в каждом дереве. Проблема возникает, когда я пытаюсь перетащить узел из одного дерева в другое. Разновидности данных не предопределяются, даже если они оба являются разными экземплярами одного и того же класса. - person Intern87; 05.08.2011