JavaFX Длительное нажатие кнопки - PullRequest
0 голосов
/ 08 октября 2019

В настоящее время я создаю мобильное приложение в 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");
            }
        }
    });

Проблема, которая у меня здесь, действительно странная.

Когда я нажимаю кнопку, метод работает. Если я нажму более 2 секунд, то получится хороший результат.

НО

Если я нажму второй раз, он напечатает PrintLn 2 раза. Если я щелкну в третий раз, результат будет напечатан 3 раза ...

Так что проблема в том, что когда я помещаю метод (скажем, dialogBox), окно будет отображаться 3 раза.

Это похоже на то, что программа запомнила, сколько раз я нажимаю на нее и дает результат, сколько раз я нажимаю кнопку.

Можно ли "сбросить" память метода?

Спасибо.

JC

РЕДАКТИРОВАТЬ

   @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");
                }
            }
        });


    }
...