gpt4 book ai didi

mouseevent - 从一个节点获取 MOUSE_PRESSED 事件后,无法从任何其他 javafx 8 节点获取鼠标事件

转载 作者:行者123 更新时间:2023-12-01 09:25:02 25 4
gpt4 key购买 nike

我正在为 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详细介绍了处理鼠标拖动的三种不同模式。正如您所观察到的,在默认模式(“简单的按下-拖动-释放手势”)中,鼠标事件仅传递到手势起源的节点。

在“完全按下-拖动-释放手势”模式下,MouseDragEvent在拖动过程中被传递到其他节点。这是您需要的模式,您可以通过在源节点上调用 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()));

关于mouseevent - 从一个节点获取 MOUSE_PRESSED 事件后,无法从任何其他 javafx 8 节点获取鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26420701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com