2009-08-07 2 views
3

У меня есть класс, полученный из JTree с пользовательскими TreeCellRenderers. Я реализовал перетаскивание в этом дереве, чтобы пользователь мог перегруппировать узлы дерева.Перетаскивание обратной связи в JTree с пользовательским TreeCellRenderer (Java, Swing)

Режим сбрасывания DropMode.ON_OR_INSERT, поэтому пользователь может удалять узлы на других узлах или между ними. Пока пользователь перетаскивает узел, если указатель указывает между узлами, выводится синяя линия, указывающая место, где будет вставлен узел. Если указатель находится на узле, то не указывается, где будет добавлен узел. Это происходит только тогда, когда я использую свой собственный TreeCellRenderer. Если я использую DefaultTreeCellRenderer, узел перетаскивания выделяется во время перетаскивания.

Я нашел несколько примеров в Интернете, где люди хранят узел, который в настоящее время выделен в JTree и запрашивает его у TreeCellRenderer, рендеринга узла разного цвета, если вызывается TreeCellRenderer для узла, который должен быть подсвечен.

Есть ли более элегантное решение для выделения узла падения? Мне не удалось понять, как это делает DefaultTreeRenderer - в нем нет перехватов, чтобы перетащить функциональность.

ответ

7

Я понял это, так на всякий случай, кто заботится:

Ответ здесь: in javadoc for TreeCellRenderer

TreeCellRenderer также отвечает за визуализацию клетки, представляющий текущую DnD расположение уронить дерева, если оно имеет один. Если это средство визуализации заботится об оказании местоположение перетаскивания ДНА, он должен запросить дерева непосредственно увидеть, если данная строка представляет собой место падения:

JTree.DropLocation dropLocation = tree.getDropLocation(); 
if (dropLocation != null 
     && dropLocation.getChildIndex() == -1 
     && tree.getRowForPath(dropLocation.getPath()) == row) { 

    // this row represents the current drop location 
    // so render it specially, perhaps with a different color 
} 

Код выше должен быть добавлен метод getTreeCellRendererComponent().

Смежные вопросы