Я использую слегка измененную версию примера Sun JTreeTable
, поддерживаемый моей собственной моделью. Это будет третий пример (один закладки на http://java.sun.com/products/jfc/tsc/articles/bookmarks/ ).
Все работает так, как ожидалось, кроме поддержки перетаскивания. Я хотел DnD, который больше похож на то, что предоставляет JTree
. Поскольку JTreeTable
является расширенным JTable
, он предоставляет Класс JTable.DropLocation
для определения местоположения перетаскивания, который не предлагает достаточно информации при перетаскивании материала в столбец, отображаемый в виде дерева JTreeTable
(без пути и без дочернего индекса). Я уже решил эту проблему, создав собственный класс DropLocation
, который основан на комбинации его версий JTable
и JTree
. Я также изменил метод рисования класса TreeTableCellRenderer
, который предоставляется упомянутой реализацией JTreeTable
, чтобы показать эту новую информацию пользователю (теперь она может видеть, узел будет помещен внутри, до или после выбранного узла, если он находится внутри столбца дерева, как и следовало ожидать от JTree
).
Но есть одна проблема.Курсор мыши сходит с ума, когда место перетаскивания отображается внутри столбца дерева. Он появляется, а затем исчезает через несколько миллисекунд или происходит так быстро, что курсор перетаскивания даже не отображается. То же самое происходит и с неизмененным примером Солнца. Я совершенно не понимаю, почему это происходит. Нашел другого человека с той же проблемой на http://www.java.net/node/663106 , но предоставленное там решение, похоже, устанавливает нулевое расположение компонента и не может быть получено с помощью ] JTreeTable.getDropLocation ()
больше не используется. Мне это нужно, чтобы преобразовать его в мой измененный DropLocation
, а затем нарисовать материал на его основе.
Я так близок к правильному решению для моего варианта использования, что могу его попробовать. Этот мигающий курсор - единственное препятствие на моем пути. Есть идеи?
Использование Java 1.6.
PS: Я решил использовать пользовательский JTreeTable
, а не один из существующих компонентов (например, Netbeans Outline или JXTreeTable
), потому что все они, похоже, страдают от JTable.DropLocation
и не предлагают поддержку для отбрасывания до или после выбранного узла дерева (только внутри). Если вам известен компонент, обеспечивающий такую функциональность, я был бы рад услышать об этом.