首页 > 解决方案 > 在 JavaFX 中,当鼠标按下并进入节点时触发事件

问题描述

在 JavaFX 中,当鼠标进入节点并按下主按钮时,如何触发事件?MOUSE_ENTERED 在这里不起作用,因为按下鼠标按钮时它不会触发事件。我是 JavaFX 的新手,没有发现任何有用的谷歌搜索。

标签: javauser-interfacejavafx

解决方案


MOUSE_ENTERED由于单击 + 移动算作拖动,因此不会触发该事件。然而,MOUSE_DRAGGED 事件仅在拖动源上触发。因此,我能想到实现这一点的唯一方法是收听场景中的拖动事件,并根据您的标准进行过滤:

Button button = new Button("MyButton");
StackPane sp = new StackPane(button);
scene = new Scene(sp, 600, 600);
scene.setOnMouseDragged(ev -> {
    if (ev.getButton() != MouseButton.PRIMARY) return;
    if (ev.getPickResult().getIntersectedNode() != button && !button.getChildrenUnmodifiable().contains(ev.getPickResult().getIntersectedNode())) return;
    System.out.println("Hovered over the button while mouse button is pressed!");
});

getPickResult().getIntersectedNode()返回当前拖动与之相交的节点。但是,根据您拖动的位置,这不是按钮,而是按钮上的文本。这就是为什么我也包括了孩子们。

总体而言似乎有点hacky,但应该可以解决问题。


推荐阅读