这是我的问题。我希望当用户点击仅jtree树节点的图标和图标时触发弹出对话框。我做了一些研究,并没有找到任何现有的方法在图标上添加鼠标监听器(如果有请让我知道!)。因此,我决定破解我的方式并使用Point对象,我可以从mouseevent.getPoint()获取鼠标是否在图标上。但是,当我调用Jtree.getCellRenct(row,col,includespacing)时,我得到的位置似乎与子节点的缩进相关。 例如,
父
-Child1
-Child2
我通过在所有三个节点上调用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的用途。我想这与root是否显示或类似性质的东西有关。
但是我仍然觉得这样做感觉不太舒服。有人可以告诉我我很好还是有更好的方法来做到这一点? : - )