Java模拟星空

简介: 看了Python模拟星空很漂亮,Java也应该必须有一个! 环境:只需要JDK1.8就好!不需要外部包!!!

前言

看了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);
    }
    @Override
    public 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()*2+1);
        }
        AnimationTimer animationTimer = new AnimationTimer() {
            @Override
            public 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()*5+1;
            this.speed = speed;
        }
        public void update(){
            x -= speed;     //控制星星向左移动
            if (x<0){
                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;
        }
    }
}
相关文章
|
SQL 分布式计算 Oracle
数据同步工具DataX的安装
数据同步工具DataX的安装
2761 0
|
SQL 存储 关系型数据库
DataX - 全量数据同步工具(2)
DataX - 全量数据同步工具
|
4月前
|
canal 数据可视化 关系型数据库
2025年5大国产ETL工具横向评测
在企业数据管理中,ETL工具成为整合分散数据的关键。本文介绍了五款主流国产ETL工具:FineDataLink(低代码、功能全面)、Kettle(开源易用)、DataX(高速同步)、Canal(MySQL实时增量处理)和StreamSets(可视化强),帮助用户根据需求选择最合适的工具,提升数据效率与业务价值。
1008 56
|
JavaScript Java 测试技术
基于SpringBoot音乐网站与分享平台详细设计和实现(源码+LW+调试文档+讲解等)
基于SpringBoot音乐网站与分享平台详细设计和实现(源码+LW+调试文档+讲解等)
|
Java 关系型数据库 DataX
DATAX数据同步
DATAX数据同步
3267 0
|
消息中间件 存储 Java
Kafka(四)【Kafka 消费者】(1)
Kafka(四)【Kafka 消费者】
|
SQL 监控 Oracle
Oracle 性能优化之AWR、ASH和ADDM(含报告生成和参数解读)
Oracle 性能优化之AWR、ASH和ADDM(含报告生成和参数解读)
|
弹性计算 关系型数据库 MySQL
阿里云服务器申请试用并快速搭建网站教程(图文教程)
阿里云提供云服务器1个月-3个月免费试用,可申请的试用配置有2核4GB 3个月、2核8GB 3个月、4核8GB 1个月、4核16GB 1个月,本文为大家介绍如何申请这些试用云服务器及在云服务器上快速搭建网站教程,以图文形式展示给大家,以供参考。
阿里云服务器申请试用并快速搭建网站教程(图文教程)
|
SQL 关系型数据库 MySQL
DataX - 全量数据同步工具(1)
DataX - 全量数据同步工具
|
机器学习/深度学习 算法
蓝桥杯正确的解题姿势
在做算法题的过程中最忌讳的就是上来就一顿乱敲,一开始我就是这样,但随着不断的刷题和老师的指导,总结了自己的刷题方法