JAVAFX:鼠标悬停和延迟?

JAVAFX: mouseOver and delay?

我想让用户在将鼠标悬停在碰撞器(只是一个透明矩形)上超过 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);
                    }
                });

这编译 - 和工作,我只是想让它做我之前提到的。

使用 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);
});

请注意 Durationjavafx.util.Duration,而不是 java.time.Duration。

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

这有效!