JAVAFX: mouseOver и задержка?

Я хотел бы, чтобы пользователь мог видеть меню описания, когда он наводит курсор на коллайдер (который представляет собой просто прозрачный прямоугольник) более 2 или 3 секунд. В настоящее время я использую расширения javaFX.

У меня есть программа, настроенная на то, что всякий раз, когда я нахожусь над коллайдером, она будет воспроизводить звуковой эффект, но я хотел бы, чтобы она давала краткое описание объекта, над которым они зависли, ЕСЛИ они навели указатель мыши на него не менее 2 раз. -3 секунды. Если это имеет смысл.

benCafCol.addEventHandler(MouseEvent.MOUSE_ENTERED, new EventHandler<MouseEvent>() 
                {
                    @Override
                    public void handle(MouseEvent e) 
                    {
                        mediaPlayer.play();
                        benCafBox.setLayoutX(0);
                        benCafBox.setLayoutY(0);
                        benCafBox.setWidth(320);
                        benCafBox.setHeight(35);
                    }
                });

                benCafCol.addEventHandler(MouseEvent.MOUSE_EXITED, new EventHandler<MouseEvent>() 
                {
                    @Override
                    public void handle(MouseEvent e) 
                    {
                        mediaPlayer.stop();

                        //default terms

                        benCafBox.setLayoutX(5);
                        benCafBox.setLayoutY(5);
                        benCafBox.setWidth(310);
                        benCafBox.setHeight(25);
                    }
                });

Это компилируется и работает, я просто хотел бы, чтобы он делал то, о чем я упоминал ранее.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
204
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Используйте ПаузаПереход:

Animation delay = new PauseTransition(Duration.seconds(2));
delay.setOnFinished(e -> {
    mediaPlayer.play();
    benCafBox.setLayoutX(0);
    benCafBox.setLayoutY(0);
    benCafBox.setWidth(320);
    benCafBox.setHeight(35);
});

benCafCol.addEventHandler(MouseEvent.MOUSE_ENTERED, 
    e -> delay.playFromStart());

benCafCol.addEventHandler(MouseEvent.MOUSE_EXITED, e -> {
    delay.stop();

    mediaPlayer.stop();

    //default terms

    benCafBox.setLayoutX(5);
    benCafBox.setLayoutY(5);
    benCafBox.setWidth(310);
    benCafBox.setHeight(25);
});

Обратите внимание, что Duration — это javafx.util. Продолжительность, а не java.time.Duration.

Большое спасибо! это именно то, что я ищу!

Kellen Miller 10.06.2019 22:10

@KellenMiller Если вы считаете, что это отвечает на ваш вопрос, рассмотрите принимаю ответ.

VGR 10.06.2019 22:46
Animation delay = new PauseTransition(Duration.seconds(2));
delay.setOnFinished(e -> {
    mediaPlayer.play();
    benCafBox.setLayoutX(0);
    benCafBox.setLayoutY(0);
    benCafBox.setWidth(320);
    benCafBox.setHeight(35);
});

benCafCol.addEventHandler(MouseEvent.MOUSE_ENTERED, 
    e -> delay.playFromStart());

benCafCol.addEventHandler(MouseEvent.MOUSE_EXITED, e -> {
    delay.stop();

    mediaPlayer.stop();

    //default terms

    benCafBox.setLayoutX(5);
    benCafBox.setLayoutY(5);
    benCafBox.setWidth(310);
    benCafBox.setHeight(25);
});

это работает!

Другие вопросы по теме