зацикливание анимации javafx

в языке программирования c ++ или c мы знаем, что для изменения кордината мы используем gotoxy (x, y), и мы можем использовать looping и sleep для изменения кордината и создания анимации. как это;

for(x = 20; x < 25; x++){
  gotoxy(x,20); cout < "*"
}
 Andy Till23 окт. 2012 г., 14:33
У Google есть ответ, проверьте класс Timelinedocs.oracle.com/javafx/2/animations/basics.htm#CJAFADFJ

Ответы на вопрос(3)

Решение Вопроса

Посмотрите на использованиеХронология Анимация, Это ключевой компонент анимации в JavaFX и

используется для определения, когда и в какой последовательности происходят ключевые части анимации.

Вотпример

 user133806211 мая 2013 г., 20:31
Вопрос был о JavaFX, а Swing работает в отдельном потоке и JavaFX. Так что если вам действительно не нужно смешивать Swing и JavaFX, нет.

В JavaFX есть три различных варианта, в зависимости от ваших потребностей.

Самый основной из нихAnimationTimer, Это'S эквивалентно Swing 'Таймер Он просто содержит метод handle, который вызывается в каждом кадре и передается текущее время в качестве аргумента. Возможно, вам нужна внутренняя бухгалтерия, чтобы вы не делали дорогостоящие вычисления при каждом вызове дескриптора.

переход имеет метод интерполяции (ГРП), который вызывается со значениями ГРП от 0,0 до 1,0, Это'Вы должны сделать все изменения пользовательского интерфейса, в зависимости от значения ГРП. И Переход, и Временная шкала расширяют Анимацию, так что вы можете установить такие вещи, как продолжительность цикла, будет ли Переход изменен в конце и т. Д.

График самый сложный. Вы определяете произвольное количество ключевых кадров (представьте себе состояния), которые содержат требуемые свойства различных узлов, и временная шкала выполнит всю работу за вас, интерполируя способы анимации изменений между предоставленными значениями. Например, вы можете указать ключевой кадр, где свойство x узла равно 0, а другое - гдеs 100, и Timeline сделает анимацию за вас.

ИспользоватьПакет анимации JavaFX.

Есть множество примеров вУчебник по анимации JavaFXКак отметил Энди в своем комментарии.

И есть милый примербегущий конь анимационный цикл.

Ключ в том, что ты неСпите с потоком приложения JavaFX, и вам придется возвращать управление потоком JavaFX обратно в систему JavaFX каждый раз, когда вы обновляете что-либо и хотите, чтобы оно было визуализировано. Классы анимации JavaFX позаботятся об этом за вас, чтобы вы нене нужно беспокоиться об этом. Если вы просто зациклите, как вы делаете в примере кода из вашего вопроса, JavaFX просто отрендерит сцену один раз после завершения вашего цикла, и вы никогда не увидите, чтобы что-то произошло.

Вот довольно скучный пример, который используетГрафик чтобы эмулировать код c ++ в вашем вопросе, чтобы перемещать точку на пиксель каждые 400 миллисекунд.

import java.util.Date;
import javafx.animation.*;
import javafx.application.Application;
import javafx.event.*;
import javafx.scene.*;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.util.Duration;

/** Simple JavaFX Animation Sample. */
public class AnimationSample extends Application {
  private       int         x        = 20;
  private       String      status   = "";
  private final Circle      dot      = new Circle(20, 20, 3);
  private final TimeCounter counter  = new TimeCounter();

  public static void main(String[] args) throws Exception { launch(args); }
  @Override public void start(final Stage stage) throws Exception {
    final Timeline timeline = new Timeline(
      new KeyFrame(Duration.ZERO, new EventHandler() {
        @Override public void handle(Event event) {
          refreshScene();
        }
      }),  
      new KeyFrame(Duration.millis(400))
    );
    timeline.setCycleCount(Timeline.INDEFINITE);

    stage.setScene(new Scene(new Group(dot), 50, 50));
    stage.show();

    counter.reset();
    timeline.play();
  }

  private void refreshScene() {
    gotoxy(x, 20);

    status = "*****".equals(status) ? "*" : status + "*";
    System.out.println(String.format("%7d", counter.elapsed()) + " ms " + x + " " + status);

    if (x == 24) {
      x = 20;
    } else {
      x++;
    }
  }      

  private void gotoxy(int x, int y) {
    dot.setCenterX(x); 
    dot.setCenterY(y);
  }

  class TimeCounter {
    private long start = new Date().getTime();
    void reset()   { start = new Date().getTime(); }
    long elapsed() { return new Date().getTime() - start; }
  }
}

Ваш ответ на вопрос