JavaFX Circle组件鼠标进出事件异常触发问题排查
问题根因
事件交替触发的核心原因是Label组件遮挡了下方的Circle:
- 鼠标移入Circle时先触发
MOUSE_ENTERED事件,随后绑定在Pane上的MOUSE_MOVED事件会将Label移动到鼠标当前坐标,此时Label恰好位于鼠标指针正下方,覆盖了Circle的感应区域 - 鼠标此时相当于悬停在Label上,不再直接接触Circle,因此立刻触发Circle的
MOUSE_EXITED事件 - 鼠标移动时Label持续跟随,反复触发Circle的进入/退出事件,就出现了你看到的交替触发现象
修复方案
给Label添加鼠标穿透配置,让它不响应、不拦截任何鼠标事件即可,修改代码如下:
Label label = new Label("Mouse point is outside the circle"); label.setMouseTransparent(true); // 新增该行配置,开启鼠标穿透 pane.getChildren().add(label);
修改后Label不会阻断下方Circle的鼠标事件捕获,既可以正常跟随鼠标移动,也不会干扰Circle的进入/退出事件判断。
内容的提问来源于stack exchange,提问作者ngongocthinh159
相关产品推荐
相关产品推荐

