当前位置: 首页 > 面试题库 >

如何实现javafx鼠标事件的“按下并按住”?

金承嗣
2023-03-14
问题内容

我正在开发JavaFX项目,并且需要类似于TouchEvent表征 “按下并按住”事件的东西
。但是应该将其映射为一个,MouseEvent因为我在Linux上的触摸事件遇到了麻烦。例如,在Ubuntu中,它不会响应触摸事件。

请让我知道,如果你对如何触发一个任何想法MouseEvent 每当 “按住” 在Linux上出现?


问题答案:

只需将a PauseTransition用作“保持”的计时器即可。如果按下鼠标,则将其启动;如果释放或拖动,则将其停止。

import javafx.animation.PauseTransition;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import javafx.util.Duration;

public class MousePressAndHoldTest extends Application {

    @Override
    public void start(Stage primaryStage) {
        Pane root = new Pane();

        addPressAndHoldHandler(root, Duration.seconds(1), 
                event -> System.out.println("Press and hold"));


        primaryStage.setScene(new Scene(root, 400, 400));
        primaryStage.show();
    }

    private void addPressAndHoldHandler(Node node, Duration holdTime, 
            EventHandler<MouseEvent> handler) {

        class Wrapper<T> { T content ; }
        Wrapper<MouseEvent> eventWrapper = new Wrapper<>();

        PauseTransition holdTimer = new PauseTransition(holdTime);
        holdTimer.setOnFinished(event -> handler.handle(eventWrapper.content));


        node.addEventHandler(MouseEvent.MOUSE_PRESSED, event -> {
            eventWrapper.content = event ;
            holdTimer.playFromStart();
        });
        node.addEventHandler(MouseEvent.MOUSE_RELEASED, event -> holdTimer.stop());
        node.addEventHandler(MouseEvent.DRAG_DETECTED, event -> holdTimer.stop());
    }


    public static void main(String[] args) {
        launch(args);
    }
}


 类似资料:
  • 所以我有这个anchorpane,我希望为第二个鼠标键添加一个鼠标listner。我尝试了以下方法,但我一直得到一个错误,有人知道问题是什么吗? 为了记录在案,我也尝试过这样做: 绑定不匹配:MouseButton类型不能有效替代EventHandler类型的有界参数

  • 我要在两个图像视图之间绘制路径,视图与图片相同 此路径从其中一个imageview开始(按鼠标),继续(按鼠标)并在窗格上移动事件,并且必须在另一个imageview结束(按鼠标)。这是第一次鼠标按下在imageviews上没有收到任何鼠标按下事件后的问题,该事件只是在窗格上收到,因为绘制线没有停止。我的代码出了什么问题? 这是我的控制器代码: 请帮帮我。

  • 我正在尝试捕捉Java中的鼠标/按键事件,即使应用程序窗口没有被聚焦。我正在创建一个类似于屏幕记录器的东西,我想通过按一个像“F9”这样的键来停止记录,所以我需要检测事件。这可能吗?有什么类似系统监听器的东西我可以使用吗? ~亨利

  • 单击并按住向上/向下箭头按钮时,微调器更新的速度很慢。有没有办法提高更换速度? 当我用鼠标单击、单击、单击时,旋转器值的变化和我单击一样快。如果我每次按下键盘上的上/下箭头,或者如果我按住上/下箭头键,它也会快速变化。我希望当我单击并按住箭头按钮时,值能快速更改。 有人知道怎么做吗?

  • 我想制作一个JavaFX应用程序,它基本上用对象覆盖整个用户屏幕,因此基本上我可以在用户屏幕上绘制任何东西。 制作一个覆盖整个屏幕的窗口很简单。使其本质上透明可以通过本教程实现:https://assylias.wordpress.com/2013/12/08/383/ 所以唯一阻止我的是这样一个事实,尽管窗口是透明的,但它仍然会捕获用户的鼠标和按键事件。 有什么办法可以做到这一点吗?举一个更具体

  • 问题内容: 有没有一种方法可以检测JavaScript中的鼠标按钮当前是否处于按下状态? 我知道“ mousedown”事件,但这不是我所需要的。按下鼠标按钮后的一段时间,我希望能够检测它是否仍被按下。 这可能吗? 问题答案: 关于Pax的解决方案:如果用户有意或无意地单击了多个按钮,则该按钮将不起作用。不要问我我怎么知道:-(。 正确的代码应如下所示: 通过这样的测试: 如果您想知道按下了什么按