mouseevent – 从一个节点获取MOUSE_PRESSED事件后,无法从任何其
发布时间:2020-12-15 04:23:04 所属栏目:Java 来源:网络整理
导读:我正在创建富文本组件,其中包含 JavaFX项目的选择功能并面临一些困难. 我试图抓住哪个TextFlow对象用户按下鼠标按钮,然后另一个TextFlow释放它.但是在MOUSE_PRESSED事件之后,我只能与那个解雇它的TextFlow进行交互,直到我释放鼠标. 以下是标签的类似示例: p
我正在创建富文本组件,其中包含
JavaFX项目的选择功能并面临一些困难.
我试图抓住哪个TextFlow对象用户按下鼠标按钮,然后另一个TextFlow释放它.但是在MOUSE_PRESSED事件之后,我只能与那个解雇它的TextFlow进行交互,直到我释放鼠标. 以下是标签的类似示例: package sample; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) throws Exception{ AnchorPane root = new AnchorPane(); primaryStage.setTitle("Events Problem Example"); primaryStage.setScene(new Scene(root,800,600)); VBox mainVB = new VBox(); root.getChildren().add(mainVB); //########## Code is here: for (int i = 0; i < 5; i++) { final Label label = new Label("label№"+i); mainVB.getChildren().addAll(label); label.setOnMouseEntered(mouseEvent -> System.out.println("entering " + label.getText())); label.setOnMousePressed(mouseEvent -> System.out.println("press mouse button on " + label.getText())); label.setOnMouseReleased(mouseEvent -> System.out.println("release mouse button on " + label.getText())); } //######################## primaryStage.show(); } public static void main(String[] args) { launch(args); } } 尝试将鼠标移到不同的标签上并在命令行中查看消息.然后在任何标签上按住鼠标主按钮并再次移动它.在释放按钮之前,您将看到没有其他标签会触发任何事件. 我花了一些时间寻找解决方案,但一无所获. 我还尝试手动触发相应标签的MOUSE_RELEASED,但它也没有帮助. 感谢您的支持. 解决方法
documentation for
MouseEvent 详细介绍了处理鼠标拖动的三种不同模式.在默认模式(“简单按下 – 拖动 – 释放手势”)中,正如您所观察到的,鼠标事件仅传递到手势源自的节点.
在“完全按下 – 拖动释放手势”模式下,MouseDragEvents在拖动期间被传递到其他节点.这是您需要的模式,您可以通过在原始节点上调用startFullDrag来激活它. (第三种模式是“拖放”手势,用于在节点之间传输数据,通常由底层平台支持,因此您可以在JavaFX应用程序和其他应用程序之间以及应用程序内拖放.) 请为您的事件处理程序尝试以下代码: label.setOnDragDetected(mouseEvent -> label.startFullDrag()); label.setOnMouseDragEntered(mouseEvent -> System.out.println("entering " + label.getText())); label.setOnMouseDragReleased(mouseEvent -> System.out.println("release mouse button on " + label.getText())); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |