这是我的问题。我希望在用户单击图标和仅 jtree 树节点的图标时触发弹出对话框。我做了一些研究,没有找到在图标上添加鼠标侦听器的任何现有方法(如果有,请告诉我!)。因此,我决定破解它并使用我可以从 mouseevent.getPoint() 中获取的 Point 对象来确定鼠标是否在图标上。但是,当我调用 Jtree.getCellRenct(row, col, includespacing) 时,我得到的位置似乎与子节点的缩进有关。例如,
家长
-儿童1
-儿童2
我通过在所有三个节点上调用 getCellRect() 来获得相同的 x 坐标,尽管我真正想要的是 x 加上由“-”引起的缩进,因为 mouseevent.getpoint() 与缩进无关。
知道我该怎么做吗?
编辑:
我想出了一个办法。我调用 tree.getUI 来获取 BasicTreeUI 对象并调用 BasicTreeUI.getLeftChildIndent() 和 BasicTreeUI.getRightChildIndent()。将这两个整数相加将是树的每个级别的总缩进(或者似乎到目前为止)。所以我计算缩进
(path.getPathCount() - 1) * (leftindent + rightindent).
到目前为止它对我有用,尽管我不完全确定这是否好。例如,我真的不知道左右缩进是什么意思。同样在 BasicTreeUI 的源代码中,它实际上有一个受保护的方法
protected int getRowX(int row, int depth)
{
return totalChildIndent * (depth + depthOffset);
}
这个方法似乎被另一个受保护的方法调用,用于检查一个位置是否在树扩展或折叠图标的区域内。我无法弄清楚 depthOffset 的用途。我想这与是否显示根目录或类似性质的东西有关。
但我仍然觉得这样做不太舒服..有人可以告诉我我很好还是有更好的方法来做到这一点?:-)