JavaFX延迟绘制形状
我怎样才能延迟绘制形状?JavaFX延迟绘制形状,java,canvas,javafx,delay,Java,Canvas,Javafx,Delay,我怎样才能延迟绘制形状? 例如,在开始时,绘制几个矩形,1秒后绘制圆角椭圆,3秒后绘制另一个椭圆,依此类推。您正在描述一个动画。为此,您应该使用 例如,使用: import java.util.ArrayList; 导入java.util.List; 导入java.util.Random; 导入javafx.animation.KeyFrame; 导入javafx.animation.Timeline; 导入javafx.application.application; 导入javafx.sce
例如,在开始时,绘制几个矩形,1秒后绘制圆角椭圆,3秒后绘制另一个椭圆,依此类推。您正在描述一个动画。为此,您应该使用 例如,使用:
import java.util.ArrayList;
导入java.util.List;
导入java.util.Random;
导入javafx.animation.KeyFrame;
导入javafx.animation.Timeline;
导入javafx.application.application;
导入javafx.scene.scene;
导入javafx.scene.layout.Pane;
导入javafx.scene.paint.Color;
导入javafx.scene.shape.eliple;
导入javafx.scene.shape.Rectangle;
导入javafx.stage.stage;
导入javafx.util.Duration;
公共类ShapeAnimationExample扩展了应用程序{
私有最终随机rng=新随机();
@凌驾
公共无效开始(阶段primaryStage){
List fewRectangles=new ArrayList();
对于(int i=0;i<5;i++){
矩形r=新矩形(rng.nextInt(300)+50,rng.nextInt(300)+50,rng.nextInt(100)+50,rng.nextInt(100)+50);
r、 setFill(randomColor());
添加(r);
}
列表椭圆=新的ArrayList();
对于(int i=0;i<5;i++){
椭圆e=新椭圆(rng.nextInt(400)+50,rng.nextInt(400)+50,rng.nextInt(50)+50,rng.nextInt(50)+50);
e、 setFill(randomColor());
添加(e);
}
窗格=新窗格();
窗格。设置大小(600600);
时间线=新时间线();
持续时间时间点=持续时间0;
持续时间暂停=持续时间。秒(1);
KeyFrame initial=新关键帧(时间点,e->pane.getChildren().addAll(fewretAngles));
timeline.getKeyFrames().add(初始);
用于(椭圆:椭圆形){
时间点=时间点。添加(暂停);
KeyFrame KeyFrame=新的关键帧(时间点,e->pane.getChildren().add(椭圆形));
timeline.getKeyFrames().add(keyFrame);
}
场景=新场景(窗格);
初级阶段。场景(场景);
primaryStage.show();
timeline.play();
}
私有颜色{
返回新颜色(rng.nextDouble(),rng.nextDouble(),rng.nextDouble(),1.0);
}
公共静态void main(字符串[]args){
发射(args);
}
}
您正在描述一个动画。为此,您应该使用
例如,使用:
import java.util.ArrayList;
导入java.util.List;
导入java.util.Random;
导入javafx.animation.KeyFrame;
导入javafx.animation.Timeline;
导入javafx.application.application;
导入javafx.scene.scene;
导入javafx.scene.layout.Pane;
导入javafx.scene.paint.Color;
导入javafx.scene.shape.eliple;
导入javafx.scene.shape.Rectangle;
导入javafx.stage.stage;
导入javafx.util.Duration;
公共类ShapeAnimationExample扩展了应用程序{
私有最终随机rng=新随机();
@凌驾
公共无效开始(阶段primaryStage){
List fewRectangles=new ArrayList();
对于(int i=0;i<5;i++){
矩形r=新矩形(rng.nextInt(300)+50,rng.nextInt(300)+50,rng.nextInt(100)+50,rng.nextInt(100)+50);
r、 setFill(randomColor());
添加(r);
}
列表椭圆=新的ArrayList();
对于(int i=0;i<5;i++){
椭圆e=新椭圆(rng.nextInt(400)+50,rng.nextInt(400)+50,rng.nextInt(50)+50,rng.nextInt(50)+50);
e、 setFill(randomColor());
添加(e);
}
窗格=新窗格();
窗格。设置大小(600600);
时间线=新时间线();
持续时间时间点=持续时间0;
持续时间暂停=持续时间。秒(1);
KeyFrame initial=新关键帧(时间点,e->pane.getChildren().addAll(fewretAngles));
timeline.getKeyFrames().add(初始);
用于(椭圆:椭圆形){
时间点=时间点。添加(暂停);
KeyFrame KeyFrame=新的关键帧(时间点,e->pane.getChildren().add(椭圆形));
timeline.getKeyFrames().add(keyFrame);
}
场景=新场景(窗格);
初级阶段。场景(场景);
primaryStage.show();
timeline.play();
}
私有颜色{
返回新颜色(rng.nextDouble(),rng.nextDouble(),rng.nextDouble(),1.0);
}
公共静态void main(字符串[]args){
发射(args);
}
}
我会研究sleep命令,它的作用是:将主线程(运行整个程序的线程)挂起,不管你告诉它多少秒。所以你可以让它画一些东西,等几秒钟,再画另一个东西。否则它将需要线程。@SomeStudent您不能在FX应用程序线程上调用sleep()
。它会阻止用户界面被呈现。我明白了,我的b,对此不确定,永远都没有做过fx。啊,对了,现在我想起来了,你可以使用FadeTransition ft=新的FadeTransition(Duration.millis(1000),night);代码来自我的旧fx应用程序。这里的night是我的场景中的一个对象,它在黑白之间交替(白天和晚上)。你需要一些动画:我不确定你会如何使用FadeTransition
来实现这一点。我会查看sleep命令,它做什么,它挂起主线程(因此运行整个程序的线程)不管你告诉它多少秒。所以你可以让它画一些东西,等几秒钟,再画另一个东西。否则它将需要线程。@SomeStudent您不能在FX应用程序线程上调用sleep()
。它会阻止用户界面被呈现。我明白了,我的b,对此不确定,永远都没有做过fx。啊,对了,现在我想起来了,你可以使用FadeTransition ft=新的FadeTransition(Duration.millis(1000),night);代码来自我的旧fx应用程序。这里的夜晚是我场景中的一个对象,它在黑白之间交替(所以da)
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Ellipse;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Duration;
public class ShapeAnimationExample extends Application {
private final Random rng = new Random();
@Override
public void start(Stage primaryStage) {
List<Rectangle> fewRectangles = new ArrayList<>();
for (int i = 0 ; i < 5 ; i++) {
Rectangle r = new Rectangle(rng.nextInt(300)+50, rng.nextInt(300)+50, rng.nextInt(100)+50, rng.nextInt(100)+50);
r.setFill(randomColor());
fewRectangles.add(r);
}
List<Ellipse> ovals = new ArrayList<>();
for (int i = 0 ; i < 5 ; i++) {
Ellipse e = new Ellipse(rng.nextInt(400)+50, rng.nextInt(400)+50, rng.nextInt(50)+50, rng.nextInt(50)+50);
e.setFill(randomColor());
ovals.add(e);
}
Pane pane = new Pane();
pane.setMinSize(600, 600);
Timeline timeline = new Timeline();
Duration timepoint = Duration.ZERO ;
Duration pause = Duration.seconds(1);
KeyFrame initial = new KeyFrame(timepoint, e -> pane.getChildren().addAll(fewRectangles));
timeline.getKeyFrames().add(initial);
for (Ellipse oval : ovals) {
timepoint = timepoint.add(pause);
KeyFrame keyFrame = new KeyFrame(timepoint, e -> pane.getChildren().add(oval));
timeline.getKeyFrames().add(keyFrame);
}
Scene scene = new Scene(pane);
primaryStage.setScene(scene);
primaryStage.show();
timeline.play();
}
private Color randomColor() {
return new Color(rng.nextDouble(), rng.nextDouble(), rng.nextDouble(), 1.0);
}
public static void main(String[] args) {
launch(args);
}
}