listview - 没有孩子的stackPane JavaFX上的鼠标事件
问题描述
您好,当鼠标单击堆栈窗格(父亲)时,我试图取消选择列表视图项。我尝试了这段代码,但是当用户单击按钮(Stackpane 的子项)时,无论如何都会触发该事件:
stackPane.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
listVisits.getSelectionModel().clearSelection();
}
});
如何仅触发堆栈窗格鼠标事件单击?
解决方案
您可以pickResult
使用MouseEvent
. 请注意,在这种情况下,不需要使用允许使用事件处理程序的事件过滤器,这会导致代码更短(当然,除非您需要将其设置为另一个值)。
stackPane.setOnMousePressed(evt -> {
// only update selection, if the cursor doesn't hover a child
if (evt.getPickResult().getIntersectedNode() == stackPane) {
listVisits.getSelectionModel().clearSelection();
evt.consume(); // don't pass the event to event handlers of ancestors (desired ?)
}
});
请注意,使用事件处理程序可以为某些孩子使用事件,如果您只想排除一些孩子将事件传递给StackPane
而不是所有孩子。如果您这样做,pickResult
则不再需要检查:
eventBlockingChild.setOnMousePressed(MouseEvent::consume);
推荐阅读
- amazon-web-services - 执行另一个联系流时,联系属性会发生什么变化?- 亚马逊连接 - 联系流
- amazon-web-services - AWS 控制台的任何工具可以查看所有服务如何在账户内链接?
- amazon-web-services - 对不返回值的对象数组使用 VTL #foreach 循环
- python - 检测输入
- apache - 仙人掌不生成图形
- php - 未定义变量:第 88 行 /home/xoxo/shipper-panel.php 中的页面
- java - java.lang.SecurityException:权限拒绝:需要 com.huawei.android.launcher.permission.WRITE_SETTINGS
- c# - 关于存在两个带有 page_load 方法的部分 _Default 类这一事实的构建错误
- spring - Spring中哪些模块和类负责Annotations的实现
- c - /usr/local/lib/libcurl.so.4:C 中没有可用的版本信息(myproject 需要)