Java 如何使用时间线设置按钮的动画?
我想制作一个按钮的动画。我想让它在点击后改变位置。我写了这样的代码,但它不起作用。在这种情况下,控制台中不会出现错误。按下按钮根本没有反应Java 如何使用时间线设置按钮的动画?,java,javafx,Java,Javafx,我想制作一个按钮的动画。我想让它在点击后改变位置。我写了这样的代码,但它不起作用。在这种情况下,控制台中不会出现错误。按下按钮根本没有反应 double stopPosition = 100; KeyValue kk2 = new KeyValue(btn.layoutXProperty(), stopPosition, Interpolator.LINEAR); KeyFrame kk = new KeyFrame(Duration.millis(5000),kk2); Timeline ti
double stopPosition = 100;
KeyValue kk2 = new KeyValue(btn.layoutXProperty(), stopPosition, Interpolator.LINEAR);
KeyFrame kk = new KeyFrame(Duration.millis(5000),kk2);
Timeline timeline = new Timeline();
timeline.getKeyFrames().add(kk);
timeline.setCycleCount(1);
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
timeline.play();
}
});
双停位=100;
KeyValue kk2=新的KeyValue(btn.layoutXProperty(),stopPosition,Interpolator.LINEAR);
关键帧kk=新的关键帧(持续时间.millis(5000),kk2);
时间线=新时间线();
timeline.getKeyFrames().add(kk);
时间线。setCycleCount(1);
btn.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
System.out.println(“你好,世界!”);
timeline.play();
}
});
我做错了什么?我假设您将按钮放置在某个布局中,该布局负责定位。如果修改
layoutX
,这意味着在下一个布局过程中,父布局只需将按钮
放回“它所属的位置”
如果要移动
按钮
,则应选择不同的布局作为父级,或使用translateX
属性translateX
相对于父布局放置按钮的位置(layoutX
)移动按钮。我假设您将按钮放置在负责定位的某个布局中。如果修改layoutX
,这意味着在下一个布局过程中,父布局只需将按钮
放回“它所属的位置”
如果要移动
按钮
,则应选择不同的布局作为父级,或使用translateX
属性translateX
将按钮相对于父布局放置它的位置移动(layoutX
)。应该设置平移坐标动画,而不是布局坐标动画
double deltaPosition = 100; //translation gets added to your current layoutX
KeyValue kk2 = new KeyValue(btn.translateXProperty(), deltaPosition, Interpolator.LINEAR);
KeyFrame kk = new KeyFrame(Duration.millis(5000),kk2);
Timeline timeline = new Timeline();
timeline.getKeyFrames().add(kk);
timeline.setCycleCount(1);
btn.setOnAction(ae -> {
System.out.println("Hello World!");
timeline.play();
}
);
布局值被布局窗格(如HBox
,AnchorPane
)覆盖,但不被组
或窗格
覆盖。或者,在按钮上设置setManaged(false)
,以便父容器不会干扰其布局,但您必须自己完成所有布局。您应该设置平移坐标动画,而不是布局坐标动画
double deltaPosition = 100; //translation gets added to your current layoutX
KeyValue kk2 = new KeyValue(btn.translateXProperty(), deltaPosition, Interpolator.LINEAR);
KeyFrame kk = new KeyFrame(Duration.millis(5000),kk2);
Timeline timeline = new Timeline();
timeline.getKeyFrames().add(kk);
timeline.setCycleCount(1);
btn.setOnAction(ae -> {
System.out.println("Hello World!");
timeline.play();
}
);
布局值被布局窗格(如HBox
,AnchorPane
)覆盖,但不被组
或窗格
覆盖。或者,在按钮上设置setManaged(false)
,这样父容器就不会干扰其布局,但您必须自己完成所有布局。非常感谢您的澄清!我想现在我会成功的。非常感谢你的澄清!我想现在我会成功的。