gpt4 book ai didi

java - 使用自定义 TreeCellRenderer(Java、Swing)在 JTree 中拖放反馈

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:18:48 30 4
gpt4 key购买 nike

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

放置模式为 DropMode.ON_OR_INSERT,因此用户可以在其他节点上或其他节点之间放置节点。当用户拖动节点时,如果指针指向节点之间,则会绘制一条蓝线,指示将插入节点的位置。如果指针在节点上,则没有指示将添加节点的位置。这仅在我使用自定义 TreeCellRenderer 时发生。如果我使用 DefaultTreeCellRenderer,放置节点会在拖动过程中突出显示。

我在网上找到了几个例子,人们将当前高亮的节点存储在 JTree 中,并从 TreeCellRenderer 中查询它,如果为应该高亮的节点调用 TreeCellRenderer,则将节点渲染为不同的颜色.

是否有更优雅的高亮放置节点的解决方案?我还没有设法弄清楚 DefaultTreeRenderer 是如何做到这一点的 - 它似乎没有拖放功能的 Hook 。

最佳答案

我想通了,以防万一有人关心:

答案就在这里: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() 方法中。

关于java - 使用自定义 TreeCellRenderer(Java、Swing)在 JTree 中拖放反馈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1244300/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com