Хорошо, похоже, вы только что начали кодировать, что не обязательно плохо, но есть некоторые вещи, которые вы должны сделать, как хорошая практика кодирования
Такие, как if(a==1) {
ЭТО ДОЛЖНО булева Если то, что ваш использовать его для вам не нужен ИНТ используется для занесения Если объект, отведя булевой все будет хорошо, как сказал @Sedrick в комментарии ниже «вы мог бы использовать getStatus () ", что имеет больше смысла, потому что тогда вам не нужно переворачивать логическое значение или изменять int каждый раз
public final Animation.Status getStatus () Получает значение статуса свойства. Описание свойства: Статус анимации. В анимации может находиться в одном из трех состояний: Animation.Status.STOPPED, Animation.Status.PAUSED или Animation.Status.RUNNING
Далее прочитайте больше об обработчиках событий, которые вам не нужны implements EventHandler<ActionEvent>
, чтобы обработать действие, вы можете сделать что-то вроде этого btn.setOnAction(event -> handle(event));
После этого вам не нужно создавать новую временную шкалу каждый раз, когда вы нажимаете кнопку, просто инициализируйте ее один раз и оставьте на этом
Переходя к Timeline
с, чтобы остановить Timeline
, вы просто делаете timeline.stop();
Итак, когда вы соберете все вместе, это будет выглядеть примерно так:
public class Main extends Application {
private Button btn = new Button();
private Pane canvas = new Pane();
private Rectangle box = new Rectangle(5, 10, 20, 30);
private Timeline timeline=new Timeline();
//int a=0;
private boolean isMoving = false;
@Override
public void start(Stage stage) {
box.setFill(Color.rgb(255,0,0));
box.relocate(100, 550);
canvas.getChildren().addAll(box, btn);
Scene scene = new Scene(canvas, 800, 600);
stage.setTitle("Moving Ball");
stage.setScene(scene);
stage.show();
Bounds bounds = canvas.getBoundsInLocal();
timeline.getKeyFrames().add(
new KeyFrame(Duration.seconds(10),
new KeyValue(box.layoutXProperty(), bounds.getMaxX() - box.getWidth())));
timeline.setCycleCount(Animation.INDEFINITE);
btn.setOnAction(event -> handle());
}
private void handle() {
if(timeline.getStatus()== Animation.Status.RUNNING) {
//a=0;
//timeline.getKeyFrames().add(
// new KeyFrame(Duration.seconds(10), new KeyValue(box.layoutXProperty() , box.getX()))
//);
//timeline.setCycleCount(Animation.INDEFINITE);
//timeline.play();
//isMoving = false;
timeline.stop();
}
else {
//a=1;
//isMoving = true;
timeline.play();
}
}
public static void main(String[] args) { launch(args); }
}