JAVAFX: мышь и задержка? - PullRequest
0 голосов
/ 10 июня 2019

Я бы хотел, чтобы пользователь мог видеть меню описания, когда он наводил курсор на коллайдер (который представляет собой просто прозрачный прямоугольник) в течение 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);
                    }
                });

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

Ответы [ 2 ]

0 голосов
/ 25 июня 2019
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);
});

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

0 голосов
/ 10 июня 2019

Используйте PauseTransition :

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.Duration , а не java.time.Duration.

...