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);
});
请注意 Duration
是 javafx.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);
});
这有效!
我想让用户在将鼠标悬停在碰撞器(只是一个透明矩形)上超过 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);
});
请注意 Duration
是 javafx.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);
});
这有效!