用JAVA实现樱花飘落

简介: 用JAVA实现樱花飘落

   用java实现一个樱花飘落的方法

package Text2;
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
public class Sakura extends JFrame {
    private List<Point> sakuraList; // 樱花的位置列表
    public Sakura() {
        sakuraList = new ArrayList<>();
        setTitle("Sakura Falling");
        setSize(800, 600);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        SakuraPanel panel = new SakuraPanel();
        add(panel);
        generateSakura(); // 生成随机的樱花位置
        setVisible(true);
        startFalling(); // 开始樱花飘落
    }
    // 生成随机的樱花位置
    private void generateSakura() {
        for (int i = 0; i < 100; i++) { // 生成100朵樱花
            int x = (int) (Math.random() * getWidth());
            int y = (int) (Math.random() * getHeight());
            sakuraList.add(new Point(x, y));
        }
    }
    // 开始樱花飘落
    private void startFalling() {
        Timer timer = new Timer(20, e -> {
            // 移动樱花的位置,模拟飘落效果
            for (Point sakura : sakuraList) {
                sakura.y += 2; // 每次向下移动2个像素
                if (sakura.y > getHeight()) { // 樱花离开窗口底部时重新回到顶部
                    sakura.y = 0;
                }
            }
            repaint(); // 重新绘制窗口
        });
        timer.start();
    }
    // 自定义Panel绘制樱花
    private class SakuraPanel extends JPanel {
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setColor(Color.PINK);
            for (Point sakura : sakuraList) {
                g.fillOval(sakura.x, sakura.y, 8, 8); // 绘制樱花的圆形形状
            }
        }
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(Sakura::new);
    }
}

  在这个代码示例中,我们创建了一个继承自JFrameSakura 类,用来展示樱花飘落的效果。首先,在构造函数中设置窗口的大小、标题和关闭操作,并添加一个自定义的SakuraPanel面板。然后调用generateSakura方法生成随机的樱花位置。最后通过调用setVisible(true)方法显示窗口,并调用startFalling方法开始樱花飘落的效果。

   在startFalling方法中,我们使用javax.swing.Timer类创建一个定时器,每隔20毫秒触发一次事件。事件处理程序将移动每个樱花的位置,使其向下飘落。如果樱花离开窗口底部,则重新回到窗口顶部。然后调用repaint方法重新绘制窗口,实现樱花飘落的动画效果。

   为了绘制樱花,我们在SakuraPanel类的paintComponent方法中使用java.awt.Graphics对象绘制樱花的形状。我们将每个樱花表示为8x8的圆形,并填充为粉色。

   最后,在main方法中,我们使用SwingUtilities.invokeLater方法在事件调度线程中启动Sakura应用程序。

相关文章
|
1月前
|
Java 调度
用JAVA实现樱花飘落
用JAVA实现樱花飘落
13 0
|
2天前
|
安全 Java 开发者
深入理解Java并发编程:线程安全与性能优化
【5月更文挑战第7天】在Java中,多线程编程是提高应用程序性能和响应能力的关键。本文将深入探讨Java并发编程的核心概念,包括线程安全、同步机制以及性能优化策略。我们将通过实例分析,了解如何避免常见的并发问题,如死锁、竞态条件和资源争用,并学习如何使用Java提供的并发工具来构建高效、可靠的多线程应用。
|
2天前
|
缓存 Java
Java并发编程:深入理解线程池
【5月更文挑战第7天】本文将深入探讨Java并发编程中的重要概念——线程池。我们将了解线程池的基本概念,以及如何使用Java的Executor框架来创建和管理线程池。此外,我们还将讨论线程池的优点和缺点,以及如何选择合适的线程池大小。最后,我们将通过一个示例来演示如何使用线程池来提高程序的性能。
|
3天前
|
安全 Java
Java中的并发编程:理解并发性与线程安全
Java作为一种广泛应用的编程语言,在并发编程方面具有显著的优势和特点。本文将探讨Java中的并发编程概念,重点关注并发性与线程安全,并提供一些实用的技巧和建议,帮助开发人员更好地理解和应用Java中的并发机制。
|
3天前
|
Java
Java中的多线程编程:基础知识与实战技巧
【5月更文挑战第6天】多线程编程是Java中的一个重要特性,它允许我们在一个程序中同时执行多个任务。本文将介绍Java多线程的基础知识,包括线程的创建、启动、同步和通信,以及如何在Java中实现多线程编程。通过实例代码和解析,帮助读者深入理解Java多线程编程的概念和应用。
|
4天前
|
Java
Java中的多线程编程:基础知识与实践
【5月更文挑战第5天】在现代软件开发中,多线程编程是一个重要的概念,尤其是在Java这样的多平台、高性能的编程语言中。通过多线程,我们可以实现并行处理,提高程序的运行效率。本文将介绍Java中多线程编程的基础知识,包括线程的概念、创建和控制方法,以及一些常见的多线程问题和解决方案。
|
7天前
|
存储 缓存 前端开发
Java串口通信技术探究3:RXTX库线程 优化系统性能的SerialPortEventListener类
Java串口通信技术探究3:RXTX库线程 优化系统性能的SerialPortEventListener类
25 3
|
7天前
|
Java
JAVA难点包括异常处理、多线程、泛型和反射,以及复杂的分布式系统知识
JAVA难点包括异常处理、多线程、泛型和反射,以及复杂的分布式系统知识。入坑JAVA因它的面向对象特性、平台无关性、强大的标准库和活跃的社区支持。
29 2
|
7天前
|
Java 调度 开发者
Java中的多线程编程:基础与实践
【5月更文挑战第2天】本文将深入探讨Java中的多线程编程,从基础概念到实际应用,为读者提供全面的理解和实践指导。我们将首先介绍线程的基本概念和重要性,然后详细解析Java中实现多线程的两种主要方式:继承Thread类和实现Runnable接口。接着,我们将探讨线程同步的问题,包括synchronized关键字和Lock接口的使用。最后,我们将通过一个实际的生产者-消费者模型来演示多线程编程的实践应用。
|
7天前
|
安全 Java 程序员
Java中的多线程编程:从理论到实践
【5月更文挑战第2天】 在计算机科学中,多线程编程是一项重要的技术,它允许多个任务在同一时间段内并发执行。在Java中,多线程编程是通过创建并管理线程来实现的。本文将深入探讨Java中的多线程编程,包括线程的概念、如何创建和管理线程、以及多线程编程的一些常见问题和解决方案。
18 1