Я использую слегка модифицированную версию примера 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.
P.S.: Я выбрал пользовательский JTreeTable
, а не один из существующих компонентов (например, Netbeans Outline или JXTreeTable
), потому что все они, похоже, страдают от проблемы JTable.DropLocation
и не предлагают поддержку удаления до или после выбранного узла дерева. (только внутри). Если вы знаете о компоненте, который обеспечивает такую функциональность, я был бы рад услышать об этом.
org.netbeans.swing.Outline
иJXTreeTable
в том, что они не могут поддерживать удаление до или после выбранного узла дерева. Это неправда, поскольку эти компоненты на самом деле поддерживают его. Оба они являются косвенным подклассом JTable. Хотя это правда, чтоJTable.DropLocation
не предоставляет информацию о пути, вы всегда можете получить ее через строку и столбец таблицы, которые он предоставляет. Если бы я знал об этом, я бы никогда не удосужился запустить свой собственный компонент. Я советую против этого. - person predi   schedule 14.06.2013