JavaFX长按按钮

JavaFX长按按钮,javafx,gluon-mobile,Javafx,Gluon Mobile,我目前正在用JavaFx构建一个带有GluonMobile插件的移动应用程序,我试图找到一种方法来知道用户是否只需点击按钮,或者按钮是否被按下超过2秒钟 我尝试了几件事,却遇到了一些问题 问题是我在网上找到了这个方法,他是我的问题 首先是代码 button.addEventFilter(MouseEvent.ANY, new EventHandler<MouseEvent>() { long startTime; @Override

我目前正在用JavaFx构建一个带有GluonMobile插件的移动应用程序,我试图找到一种方法来知道用户是否只需点击按钮,或者按钮是否被按下超过2秒钟

我尝试了几件事,却遇到了一些问题

问题是我在网上找到了这个方法,他是我的问题

首先是代码

button.addEventFilter(MouseEvent.ANY, new EventHandler<MouseEvent>() {

        long startTime;

        @Override
        public void handle(MouseEvent event) {
            if (event.getEventType().equals(MouseEvent.MOUSE_PRESSED)) {
                startTime = System.currentTimeMillis();
            } else if (event.getEventType().equals(MouseEvent.MOUSE_RELEASED)) {
                if (System.currentTimeMillis() - startTime > 2 * 1000) {
                    System.out.println("Pressed for at least 2 seconds (" + (System.currentTimeMillis() - startTime) + " milliseconds)");
                } else
                    System.out.println("Pressed for " + (System.currentTimeMillis() - startTime) + " milliseconds");
            }
        }
    });
button.addEventFilter(MouseEvent.ANY,neweventhandler()){
长启动时间;
@凌驾
公共无效句柄(MouseeEvent事件){
if(event.getEventType().equals(MouseEvent.MOUSE_按下)){
startTime=System.currentTimeMillis();
}else if(event.getEventType().equals(MouseEvent.MOUSE_已释放)){
如果(System.currentTimeMillis()-startTime>2*1000){
System.out.println(“按下至少2秒(+(System.currentTimeMillis()-startTime)+“毫秒”);
}否则
System.out.println(“按下表示”+(System.currentTimeMillis()-startTime)+“毫秒”);
}
}
});
我这里的问题真的很奇怪

当我点击按钮时,该方法工作。 如果我点击超过2秒,它会打印出好的结果

但是

如果我再次单击它,它将打印2次。 如果我第三次单击,它将打印结果3次

所以问题是当我放置一个方法(比如一个对话框)时,这个框会显示3次

这就像程序有我点击它多少次的记忆,然后给我点击按钮的次数

我可以“重置”该方法的内存吗

谢谢

Jc

编辑

@FXML
公共作废按钮单击(ActionEvent ActionEvent){
btn1.addEventFilter(MouseEvent.ANY,neweventhandler()){
长启动时间;
@凌驾
公共无效句柄(MouseeEvent事件){
if(event.getEventType().equals(MouseEvent.MOUSE_按下)){
startTime=System.currentTimeMillis();
}else if(event.getEventType().equals(MouseEvent.MOUSE_已释放)){
如果(System.currentTimeMillis()-startTime>2*1000){
System.out.println(“按下至少2秒(+(System.currentTimeMillis()-startTime)+“毫秒”);
}否则
System.out.println(“按下表示”+(System.currentTimeMillis()-startTime)+“毫秒”);
}
}
});
}

这里有一个“长按事件”片段:关于您的问题,它对我来说很好,但看起来您是在一次又一次地向按钮添加事件过滤器?你能发布你的视图吗?我编辑了第一个postHmm…,每次你点击按钮,你都在添加一个新的事件过滤器。即使你使用了事件,最好只设置一次事件过滤器,即在
initialize()
方法中。
   @FXML
   public void buttonClick(ActionEvent actionEvent) {

        btn1.addEventFilter(MouseEvent.ANY, new EventHandler<MouseEvent>() {

            long startTime;

            @Override
            public void handle(MouseEvent event) {
                if (event.getEventType().equals(MouseEvent.MOUSE_PRESSED)) {
                    startTime = System.currentTimeMillis();
                } else if (event.getEventType().equals(MouseEvent.MOUSE_RELEASED)) {
                    if (System.currentTimeMillis() - startTime > 2 * 1000) {
                        System.out.println("Pressed for at least 2 seconds (" + (System.currentTimeMillis() - startTime) + " milliseconds)");
                    } else
                        System.out.println("Pressed for " + (System.currentTimeMillis() - startTime) + " milliseconds");
                }
            }
        });


    }