存在Stage
,其中包含一些简单节点,例如Circle
布局中的Rectangle
(右)和BordePane
(左)。
我想要的是如果鼠标没有被移动1秒钟(在窗口中),圆圈就会消失。
如果elememt在最后1秒内未输入Rectangle
,则该矩形将消失。
我正在考虑使用Thread
,但它看起来并不正确。
是否有JavaFX
个包来执行此操作?有些代码会感激不尽。
答案 0 :(得分:3)
使用几个PauseTransition
s:
PauseTransition hideCircle = new PauseTransition(Duration.seconds(1));
PauseTransition hideRectangle = new PauseTransition(Duration.seconds(1));
// restart hideCircle if mouse moves in window:
scene.addEventFilter(MouseEvent.MOUSE_MOVED, e -> hideCircle.playFromStart());
// restart hideRectangle if mouse enters rectangle:
rectangle.setOnMouseEntered(e -> hideRectangle.playFromStart());
// hide circle if pause gets to end:
hideCircle.setOnFinished(e -> circle.setVisible(false));
// hide rectangle if pause gets to end:
hideRectangle.setOnFinished(e -> rectangle.setVisible(false));
// start "timers":
hideCircle.play();
hideRectangle.play();
您可能更愿意从父级中移除形状,而不是将visible
设置为false,具体取决于您要执行的操作。
答案 1 :(得分:0)
使用javafx.concurrent.Task<V>
(doc:https://docs.oracle.com/javafx/2/api/javafx/concurrent/Task.html)实现一个可以对您的更改做出反应的后台侦听器,一旦您想对GUI元素执行某些操作,请在Platform.runLater()
{ p>