如何在特定区域禁用鼠标事件
How to disable mouse events over a certain area
因此,我拥有的是一个较大窗格内的较小窗格,而我想要做的是 enable/disable 对该较小窗格上的鼠标事件进行任何处理。这在理论上可以通过将较小窗格及其所有子窗格的鼠标事件设置为 null,然后稍后恢复它们来完成。但这很乏味,我想知道是否有更简单的方法。
我可以在那个较小的窗格上设置一个透明窗格以 "capture" 鼠标点击该区域吗?任何建议表示赞赏。顺便说一句,我在 javafx 工作。
为 smallPane
使用事件过滤器并为 smallPane
及其后代消耗鼠标事件:
EventHandler<MouseEvent> handler = MouseEvent::consume;
// block events
smallPane.addEventFilter(MouseEvent.ANY, handler);
稍后您可以重新启用删除事件过滤器
smallPane.removeEventFilter(MouseEvent.ANY, handler);
这样您就可以禁用鼠标事件,而不是 KeyEvent
s 等...
您可以只禁用该窗格:
smallPane.setDisable(true);
这也将禁用它的任何子节点。 (请参阅 documentation,其中显示 "Setting disable to true will cause this Node
and any subnodes to become disabled.")。
要再次启用它,只需执行
smallPane.setDisable(false);
因此,我拥有的是一个较大窗格内的较小窗格,而我想要做的是 enable/disable 对该较小窗格上的鼠标事件进行任何处理。这在理论上可以通过将较小窗格及其所有子窗格的鼠标事件设置为 null,然后稍后恢复它们来完成。但这很乏味,我想知道是否有更简单的方法。
我可以在那个较小的窗格上设置一个透明窗格以 "capture" 鼠标点击该区域吗?任何建议表示赞赏。顺便说一句,我在 javafx 工作。
为 smallPane
使用事件过滤器并为 smallPane
及其后代消耗鼠标事件:
EventHandler<MouseEvent> handler = MouseEvent::consume;
// block events
smallPane.addEventFilter(MouseEvent.ANY, handler);
稍后您可以重新启用删除事件过滤器
smallPane.removeEventFilter(MouseEvent.ANY, handler);
这样您就可以禁用鼠标事件,而不是 KeyEvent
s 等...
您可以只禁用该窗格:
smallPane.setDisable(true);
这也将禁用它的任何子节点。 (请参阅 documentation,其中显示 "Setting disable to true will cause this Node
and any subnodes to become disabled.")。
要再次启用它,只需执行
smallPane.setDisable(false);