Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX延迟绘制形状_Java_Canvas_Javafx_Delay - Fatal编程技术网

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);
    }
}