厦门市建设工程质监站网站,泰安有什么互联网公司,做app需要学什么,精美的商城网站介绍目录
前言
JavaFX基础
1. GraphicsContext
2. AnimationTimer
代码实现
完整代码 前言
看了Python模拟星空很漂亮#xff0c;Java也应该必须有一个#xff01;
环境#xff1a;只需要JDK1.8就好#xff01;不需要外部包#xff01;#xff01;#xff01;
Jav… 目录
前言
JavaFX基础
1. GraphicsContext
2. AnimationTimer
代码实现
完整代码 前言
看了Python模拟星空很漂亮Java也应该必须有一个
环境只需要JDK1.8就好不需要外部包
JavaFX基础
1. GraphicsContext
GraphicsContext是JavaFX中用于绘图的类它是Canvas类的成员之一可以通过Canvas的getGraphicsContext2D()方法获取。GraphicsContext提供了一组方法用于绘制各种基本形状、图像、文本等。 GraphicsContext中常用的绘图方法如下
strokeRect()绘制一个空心矩形。fillRect()绘制一个实心矩形。strokeOval()绘制一个空心椭圆。fillOval()绘制一个实心椭圆。strokePolygon()绘制一个空心多边形。fillPolygon()绘制一个实心多边形。drawImage()绘制一张图像。strokeText()绘制一段空心文本。fillText()绘制一段实心文本。setLineWidth()设置线条宽度。setStroke()设置线条颜色。setFill()设置填充颜色。setFont()设置字体。
绘图的过程一般是先设置好绘图属性比如线条宽度、颜色、填充等然后调用GraphicsContext中的绘图方法进行绘制。
2. AnimationTimer
AnimationTimer是JavaFX中一个用于处理动画的类它继承自抽象类AnimationTimer需要实现handle(long now)方法。 使用AnimationTimer类处理动画的步骤如下
创建AnimationTimer对象重写handle(long now)方法。在handle(long now)方法中更新动画状态比如更新物体位置、角度等。在handle(long now)方法结尾处调用自身以实现动画的连续播放。
代码实现
用上面的 GraphicsContext 对象画笔绘制一个黑色背景画布因为要做成动画所以要放到AnimationTimer 的handle方法里面其余说明已经标好注释了
完整代码
import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.stage.Stage;import java.util.Random;public class StarField extends Application {//类变量private static final int WIDTH 800;private static final int HEIGHT 600;private static final int STAR_NUMS 100;private Star[] stars new Star[STAR_NUMS];private Random random new Random();public static void main(String[] args) {launch(args);}Overridepublic void start(Stage primaryStage) throws Exception {Canvas canvas new Canvas(WIDTH,HEIGHT);GraphicsContext gc canvas.getGraphicsContext2D();for (int i 0; i STAR_NUMS; i) {stars[i] new Star(random.nextInt(WIDTH),random.nextInt(HEIGHT),random.nextDouble()*21);}AnimationTimer animationTimer new AnimationTimer() {Overridepublic void handle(long now) {gc.setFill(Color.BLACK); //设置画笔颜色gc.fillRect(0,0,WIDTH,HEIGHT); //填充满整个矩形画布for (Star star : stars){star.update();gc.setFill(Color.WHITE);gc.fillOval(star.getX(),star.getY(),star.getSize(),star.getSize());}}};Group group new Group(canvas);Scene scene new Scene(group);primaryStage.setScene(scene);primaryStage.show();animationTimer.start();}private class Star{//对象变量private double x;private double y;private double size;private double speed;public Star(double x,double y,double speed){this.x x;this.y y;this.size random.nextDouble()*51;this.speed speed;}public void update(){x - speed; //控制星星向左移动if (x0){x WIDTH; //循环播放,每次出发点的y坐标发生变化y random.nextInt(HEIGHT);}}public double getX() {return x;}public void setX(double x) {this.x x;}public double getY() {return y;}public void setY(double y) {this.y y;}public double getSize() {return size;}public void setSize(double size) {this.size size;}public double getSpeed() {return speed;}public void setSpeed(double speed) {this.speed speed;}}
}