javafx动画循环 在C++或C语言中,我们知道改变GoDyy(x,y)的连接,可以使用循环和睡眠来改变连线和制作动画。像这样, for(x = 20; x < 25; x++){ gotoxy(x,20); cout << "*" } (x=20;x
下面是一个关于使用的介绍。它是JavaFX和javafx动画循环 在C++或C语言中,我们知道改变GoDyy(x,y)的连接,可以使用循环和睡眠来改变连线和制作动画。像这样, for(x = 20; x < 25; x++){ gotoxy(x,20); cout << "*" } (x=20;x,java,javafx-2,javafx,Java,Javafx 2,Javafx,下面是一个关于使用的介绍。它是JavaFX和中动画的关键组件 用于确定动画的关键部分出现的时间和顺序 下面是一个使用 正如安迪在评论中所指出的那样,这本书中有许多例子 还有一个很可爱的例子 关键是你不需要休眠JavaFX应用程序线程,每次你更新某个东西并希望它被渲染时,你都必须将JavaFX线程的控制权释放回JavaFX系统。JavaFX动画类会为你处理这些事情,这样你就不必担心了。如果你像在示例中那样循环根据您的问题,JavaFX将在循环完成后渲染场景一次,您将永远不会看到任何事情发生 这是一
中动画的关键组件 用于确定动画的关键部分出现的时间和顺序 下面是一个使用 正如安迪在评论中所指出的那样,这本书中有许多例子 还有一个很可爱的例子 关键是你不需要休眠JavaFX应用程序线程,每次你更新某个东西并希望它被渲染时,你都必须将JavaFX线程的控制权释放回JavaFX系统。JavaFX动画类会为你处理这些事情,这样你就不必担心了。如果你像在示例中那样循环根据您的问题,JavaFX将在循环完成后渲染场景一次,您将永远不会看到任何事情发生
这是一个相当无聊的例子,它用A来模拟你的问题中的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; }
}
}
使用
正如安迪在评论中所指出的那样,这本书中有许多例子
还有一个很可爱的例子
关键是你不需要休眠JavaFX应用程序线程,每次你更新某个东西并希望它被渲染时,你都必须将JavaFX线程的控制权释放回JavaFX系统。JavaFX动画类会为你处理这些事情,这样你就不必担心了。如果你像在示例中那样循环根据您的问题,JavaFX将在循环完成后渲染场景一次,您将永远不会看到任何事情发生
这是一个相当无聊的例子,它用A来模拟你的问题中的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; }
}
}
根据您的需要,JavaFX中有三种不同的选项 最基本的方法是。它相当于Swing的计时器。它只包含一个句柄方法,在每一帧上调用该方法,并将当前时间作为参数传递。您可能需要一些内部簿记,以便不必每次调用句柄时都进行昂贵的计算 有一个插值(frac)方法,使用介于0.0和1.0之间的frac值调用该方法。由您根据frac值执行所有想要的UI更改。过渡和时间线都扩展动画,因此您可以设置循环持续时间、过渡是否在结束时反转等内容
是最复杂的一个。您可以定义任意数量的关键帧(想想状态)包含不同节点的所需属性,时间轴将为您完成所有的工作,为您插值如何在提供的值之间设置更改的动画。例如,您可以在节点的x属性为0的情况下指定一个关键帧,在节点的x属性为100的情况下指定另一个关键帧,时间轴将为您设置动画。有三个不同的选项在JavaFX中,根据您的需要 最基本的方法是。它相当于Swing的计时器。它只包含一个句柄方法,在每一帧上调用该方法,并将当前时间作为参数传递。您可能需要一些内部簿记,以便不必每次调用句柄时都进行昂贵的计算 有一个插值(frac)方法,使用介于0.0和1.0之间的frac值调用该方法。由您根据frac值执行所有想要的UI更改。过渡和时间线都扩展动画,因此您可以设置循环持续时间、过渡是否在结束时反转等内容
是最复杂的一个。您可以定义任意数量的关键帧(想想状态)包含不同节点的所需属性,时间轴将为您完成所有工作,为您插值如何在提供的值之间设置更改的动画。例如,您可以在节点的x属性为0的位置设置一个关键帧,在节点的x属性为100的位置设置另一个关键帧,时间轴将为您设置动画。谷歌有答案,请查看Timeline类Google有答案,看看Timeline类这个问题是关于JavaFX的,Swing stuff在一个单独的线程和JavaFX中运行。所以除非你真的需要混合Swing和JavaFX,不要。问题是关于JavaFX,Swing stuff在一个单独的线程和JavaFX中运行。所以除非你真的需要混合Swing和JavaFX,不要T