首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在带有自定义TreeCellRenderer (Java、Swing)的JTree中拖放反馈

在带有自定义TreeCellRenderer (Java、Swing)的JTree中拖放反馈
EN

Stack Overflow用户
提问于 2009-08-07 11:40:52
回答 1查看 2.3K关注 0票数 3

我有一个从JTree派生的带有自定义TreeCellRenderers的类。我已经在该树中实现了拖放,因此用户可以重新排列树节点。

drop模式是DropMode.ON_OR_INSERT,因此用户可以将节点放在其他节点上或节点之间。当用户拖动节点时,如果指针指向节点之间,则会绘制一条蓝线,指示将插入节点的位置。如果指针位于节点上,则没有将该节点添加到何处的指示。只有当我使用我的自定义TreeCellRenderer时才会发生这种情况。如果我使用DefaultTreeCellRenderer,拖放节点会在拖动过程中高亮显示。

我在web上找到了一些例子,在这些例子中,人们存储当前在JTree中突出显示的节点,并从TreeCellRenderer中查询它,如果为应该突出显示的节点调用TreeCellRenderer,则会以不同的颜色呈现节点。

是否有更优雅的解决方案来突出显示drop节点?我还没有弄清楚DefaultTreeRenderer是如何做到这一点的--它似乎没有提供拖放功能的钩子。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-08-21 10:51:20

我想通了,所以如果有人关心的话:

答案就在这里:in javadoc for TreeCellRenderer

TreeCellRenderer还负责呈现表示树的当前DnD放置位置的单元格。如果此渲染器关心渲染DnD放置位置,它应该直接查询树,以查看给定行是否表示放置位置:

代码语言:javascript
复制
 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()方法中。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1244300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档