我有一个从JTree派生的带有自定义TreeCellRenderers的类。我已经在该树中实现了拖放,因此用户可以重新排列树节点。
drop模式是DropMode.ON_OR_INSERT,因此用户可以将节点放在其他节点上或节点之间。当用户拖动节点时,如果指针指向节点之间,则会绘制一条蓝线,指示将插入节点的位置。如果指针位于节点上,则没有将该节点添加到何处的指示。只有当我使用我的自定义TreeCellRenderer时才会发生这种情况。如果我使用DefaultTreeCellRenderer,拖放节点会在拖动过程中高亮显示。
我在web上找到了一些例子,在这些例子中,人们存储当前在JTree中突出显示的节点,并从TreeCellRenderer中查询它,如果为应该突出显示的节点调用TreeCellRenderer,则会以不同的颜色呈现节点。
是否有更优雅的解决方案来突出显示drop节点?我还没有弄清楚DefaultTreeRenderer是如何做到这一点的--它似乎没有提供拖放功能的钩子。
发布于 2009-08-21 10:51:20
我想通了,所以如果有人关心的话:
答案就在这里:in javadoc for TreeCellRenderer
TreeCellRenderer还负责呈现表示树的当前DnD放置位置的单元格。如果此渲染器关心渲染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()方法中。
https://stackoverflow.com/questions/1244300
复制相似问题