【发布时间】:2010-03-17 14:30:25
【问题描述】:
正如问题所述,我想为我的JTree 设置一个鼠标侦听器,以便当用户将鼠标放在节点上时我可以将光标更改为HAND_CURSOR。
我已经在我的 JTree 上注册了一个 MouseAdapter 来处理点击事件,但我似乎无法获得一个 MouseMoved 或 MouseEntered/MouseExited 来处理我正在尝试做的事情。
有什么建议吗?
【问题讨论】:
正如问题所述,我想为我的JTree 设置一个鼠标侦听器,以便当用户将鼠标放在节点上时我可以将光标更改为HAND_CURSOR。
我已经在我的 JTree 上注册了一个 MouseAdapter 来处理点击事件,但我似乎无法获得一个 MouseMoved 或 MouseEntered/MouseExited 来处理我正在尝试做的事情。
有什么建议吗?
【问题讨论】:
你需要添加一个MouseMotionListener/Adapter:
tree.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
int x = (int) e.getPoint().getX();
int y = (int) e.getPoint().getY();
TreePath path = tree.getPathForLocation(x, y);
if (path == null) {
tree.setCursor(Cursor.getDefaultCursor());
} else {
tree.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
}
}
});
【讨论】:
在 JTree 中,每个树节点都由与该树关联的TreeCellRenderer 生成的标签显示。通常使用的类是DefaultTreeCellRenderer,它呈现这个(DefaultTreeCellRenderer)。因此,您可以尝试添加这个 DefaultTreeCellRenderer 一个 MouseMotionListener 来切换鼠标光标。
注意,将 MouseMotionListener 添加到树中只会在 Tree 组件上切换鼠标渲染,而不是在鼠标位于标签上时。
【讨论】: