如何确定用户是否在特定JavaFX节点之外单击?

伏地魔

我有一个TextField,如果用户单击不是其本身的任何位置我想做些事情TextField

  • 显然,onMouseClicked如果您不单击节点本身,则事件不会触发,因此将无法正常工作。
  • 侦听focusedProperty可能是一个好主意,但问题是我的应用程序几乎整个都无法遍历焦点,因此在许多情况下,在文本字段外单击不会使焦点不集中,因此不会通知侦听器。

我唯一想做的就是在事件本身上放置一个事件过滤器,拦截鼠标单击,获取单击坐标并确定它们是否在文本框的范围内。我发现这有点矫kill过正,我可能会缺少一些更明显的东西。

还有另一种方法来确定用户是否单击了我TextField节点之外的任何地方

法比安

我唯一想做的就是在事件本身上放置一个事件过滤器,拦截鼠标单击,获取单击坐标并确定它们是否在文本框的范围内。我发现这有点矫kill过正,我可能会缺少一些更明显的东西。

实际上,我认为这是您最好的选择,但有一些变化:

使用PickResult由提供MouseEvent以获得目标Node和检查,如果它在的层次结构Node(如果Node具有子元素,则这可能是必要的;例如,aTextField也包含一个Text元素。)

实际上,这似乎是无法通过消耗场景图中某个地方的事件来打破的唯一选择。

例子

如果用户单击以外的其他位置,这会将焦点移到根窗格TextField

public static boolean inHierarchy(Node node, Node potentialHierarchyElement) {
    if (potentialHierarchyElement == null) {
        return true;
    }
    while (node != null) {
        if (node == potentialHierarchyElement) {
            return true;
        }
        node = node.getParent();
    }
    return false;
}

@Override
public void start(Stage primaryStage) {
    TextField textField = new TextField();
    textField.setMinSize(400, Region.USE_PREF_SIZE);
    textField.setMaxWidth(400);
    textField.setEditable(false);
    textField.textProperty().bind(Bindings.when(textField.focusedProperty()).then("Got the Focus!").otherwise("Please give me the focus!"));

    StackPane root = new StackPane();
    root.getChildren().add(textField);

    Scene scene = new Scene(root, 500, 200);

    scene.addEventFilter(MouseEvent.MOUSE_CLICKED, evt -> {
        if (!inHierarchy(evt.getPickResult().getIntersectedNode(), textField)) {
            root.requestFocus();
        }
    });

    primaryStage.setScene(scene);
    primaryStage.show();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何确定何时在弹出窗口之外单击?

来自分类Dev

如何确定链接是否被特定的电子邮件ID单击

来自分类Dev

如何确定D3树节点是否落在SVG容器之外

来自分类Dev

如何确定当前用户是否在特定组中?

来自分类Dev

确定用户是否单击了外部阴影dom

来自分类Dev

如何确定用户单击了哪个命名范围

来自分类Dev

如何在JavaFX中使圆形按钮之外的区域不可单击

来自分类Dev

如何确定iPhone用户是否正在睡觉?

来自分类Dev

如何确定用户是否输入数字?

来自分类Dev

如何确定iPhone用户是否正在睡觉?

来自分类Dev

JavaFX-如何从AnchorPane删除特定节点

来自分类Dev

如何获取特定用户是否在根节点上具有{写入,读取}权限

来自分类Dev

如何在JavaFX节点树中找到特定的节点?

来自分类Dev

如何通过节点确定用户的操作系统?

来自分类Dev

当用户单击“确定”时,如何显示UIAlertController并执行操作?

来自分类Dev

当用户单击“确定”时,如何显示UIAlertController并执行操作?

来自分类Dev

VBA Excel用户窗体。如何确定单击了哪个图像

来自分类Dev

动态解析JSON后如何确定节点是否存在

来自分类Dev

如何确定内核或udev是否创建了设备节点?

来自分类Dev

木偶如何确定节点是否处于活动状态?(已更改)

来自分类Dev

如何确定是否单击或触摸了按钮?

来自分类Dev

如何确定我是否单击了Google Graphs ScatterChart的背景?

来自分类Dev

如何使用Selenium Webriver确定链接是否可单击

来自分类Dev

单击按钮时如何确定是否创建新窗口

来自分类Dev

如何确定$(this)是否在单击事件数组中

来自分类Dev

检查用户是否在组件中的特定div内单击

来自分类Dev

确定树节点是否存在

来自分类Dev

确定是否单击了元素?

来自分类Dev

如何确定用户是否取消了Google Play订阅?

Related 相关文章

  1. 1

    如何确定何时在弹出窗口之外单击?

  2. 2

    如何确定链接是否被特定的电子邮件ID单击

  3. 3

    如何确定D3树节点是否落在SVG容器之外

  4. 4

    如何确定当前用户是否在特定组中?

  5. 5

    确定用户是否单击了外部阴影dom

  6. 6

    如何确定用户单击了哪个命名范围

  7. 7

    如何在JavaFX中使圆形按钮之外的区域不可单击

  8. 8

    如何确定iPhone用户是否正在睡觉?

  9. 9

    如何确定用户是否输入数字?

  10. 10

    如何确定iPhone用户是否正在睡觉?

  11. 11

    JavaFX-如何从AnchorPane删除特定节点

  12. 12

    如何获取特定用户是否在根节点上具有{写入,读取}权限

  13. 13

    如何在JavaFX节点树中找到特定的节点?

  14. 14

    如何通过节点确定用户的操作系统?

  15. 15

    当用户单击“确定”时,如何显示UIAlertController并执行操作?

  16. 16

    当用户单击“确定”时,如何显示UIAlertController并执行操作?

  17. 17

    VBA Excel用户窗体。如何确定单击了哪个图像

  18. 18

    动态解析JSON后如何确定节点是否存在

  19. 19

    如何确定内核或udev是否创建了设备节点?

  20. 20

    木偶如何确定节点是否处于活动状态?(已更改)

  21. 21

    如何确定是否单击或触摸了按钮?

  22. 22

    如何确定我是否单击了Google Graphs ScatterChart的背景?

  23. 23

    如何使用Selenium Webriver确定链接是否可单击

  24. 24

    单击按钮时如何确定是否创建新窗口

  25. 25

    如何确定$(this)是否在单击事件数组中

  26. 26

    检查用户是否在组件中的特定div内单击

  27. 27

    确定树节点是否存在

  28. 28

    确定是否单击了元素?

  29. 29

    如何确定用户是否取消了Google Play订阅?

热门标签

归档