Java圣诞树

news/2024/12/29 4:27:42/

目录

写在前面

技术需求

程序设计

代码分析

一、代码结构与主要功能概述

二、代码功能分解与分析

1. 类与常量定义

2. 绘制树的主逻辑

3. 彩色球的绘制

4. 动态效果的实现

5. 窗口初始化

三、关键特性与优点

四、总结

写在后面


写在前面

Java语言绘制精美圣诞树的完整代码。 

技术需求

  1. Java Swing:使用 JFrameJPanel 来创建图形界面和绘图面板。JFrame 用于创建窗口,JPanel 用于承载绘图内容。

  2. 图形绘制(Java AWT):使用 Graphics 类进行图形绘制,主要利用 fillPolygon 绘制圣诞树、五角星和 fillOval 绘制彩色球,drawString 绘制心形符号。

  3. 随机数生成(Random 类):通过 Random 类生成随机数,主要用于生成随机颜色和心形符号的随机位置,使得每次绘制的效果都不相同。

  4. 定时器(Timer 类):使用 Timer 定时器实现每隔 500 毫秒自动重新绘制界面,产生动态更新效果。

  5. 面向对象编程(OOP):利用面向对象的设计方式,将圣诞树绘制功能封装在 ChristmasTree 类中,增强代码的模块化和可维护性。

程序设计

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.*;
import javax.swing.*;public class ChristmasTree extends JFrame {MyPanel p;public static void main(String[] args) {new ChristmasTree();}ChristmasTree() {p = new MyPanel();add(p);setTitle("圣诞树");setBounds(400, 200, 800, 600);setVisible(true);validate();setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}……

代码分析

以下是对该Java代码的详细分析,其作用是通过 javax.swingjava.awt 库绘制一个带有装饰物的圣诞树,并通过定时器实现动态更新效果。


一、代码结构与主要功能概述

这段代码以面向对象的方式编写,核心功能是通过 JPanelpaintComponent 方法在窗口中绘制一个圣诞树的图案,并动态显示心形符号和彩色球。以下是主要功能模块:

  1. 圣诞树绘制:利用三角形模拟圣诞树结构,逐层叠加。
  2. 动态心形符号绘制:心形符号随机出现在屏幕上的不同位置。
  3. 彩色装饰球绘制:在树的不同位置绘制彩色装饰球。
  4. 树顶五角星绘制:以几何方式计算并绘制一个五角星。
  5. 动态刷新:通过 Timer 类实现每隔 500 毫秒重新绘制树,带来动态效果。

二、代码功能分解与分析

1. 类与常量定义

private static final int X = 666;
private static final int Y = 400;
private Random rand = new Random();
  • XY 分别定义了窗口的宽度和高度。
  • rand 是一个 Random 对象,用于生成随机数,支持动态颜色和随机位置的绘制。

2. 绘制树的主逻辑

paintComponent(Graphics g) 方法

这是绘图的核心方法,重载了 JPanelpaintComponent 方法:

  • 调用父类方法super.paintComponent(g) 清空上一次的绘图内容,避免出现叠加。

  • 随机心形符号绘制

    for (int i = 0; i < 5; i++) {g.drawString("❤", rand.nextInt(X - 10), rand.nextInt(Y - 10));
    }
    

    利用随机数生成心形符号的坐标,达到随机位置的效果。

  • 树形结构绘制

    for (int i = 0; i < 10; i++) {int[] xPoints = {baseX, baseX - (width + i * 10), baseX + (width + i * 10)};int[] yPoints = {baseY + i * height / 2, baseY + (i + 1) * height, baseY + (i + 1) * height};g.fillPolygon(xPoints, yPoints, 3);
    }
    
    • baseXbaseY 是基点,用于确定三角形的中心位置。
    • 利用循环逐层叠加三角形,每层的宽度和高度递增,形成树状效果。
  • 树顶五角星绘制

    double a = Math.PI / 2;
    for (int i = 0; i < 5; i++) {starX[i] = (int) (baseX + Math.cos(a) * 23);starY[i] = (int) (baseY - Math.sin(a) * 23);a += Math.PI * 4 / 5;
    }
    g.fillPolygon(starX, starY, 5);
    

    五角星通过数学公式生成顶点:

    • 通过余弦和正弦函数计算顶点的坐标。
    • 角度 a 初始为 PI/2(90°),每次累加 PI*4/5,确保绘制出标准五角星。
  • 树的底部绘制

    g.setColor(new Color(139, 69, 19));
    g.fillRect(X * 19 / 40, baseY + 10 * height, X * 2 / 40, height * 2);
    

    fillRect 方法绘制树干的矩形。

3. 彩色球的绘制

private void drawRandomBalls(Graphics g) {g.setColor(new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256)));g.fillOval(X * 12 / 25, Y * 25 / 100, 10, 10);// 省略其他球的绘制
}
  • 调用 fillOval 方法在指定位置绘制彩色球。
  • 每次绘制时随机生成 RGB 值以改变颜色。
  • 球的直径固定为 10,分布在树的不同位置。

4. 动态效果的实现

Timer timer = new Timer(500, e -> panel.repaint());
timer.start();
  • Timer 类定时调用 repaint() 方法,以 500 毫秒的间隔重新绘制。
  • 每次绘制时心形符号、彩色球和颜色都随机变化,增加动态性。

5. 窗口初始化

JFrame frame = new JFrame("Christmas Tree");
ChristmasTree panel = new ChristmasTree();
frame.setSize(X, Y);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panel);
frame.setVisible(true);
  • 创建一个 JFrame 窗口,设置标题、大小和关闭行为。
  • ChristmasTree 面板添加到窗口,显示绘制内容。

三、关键特性与优点

  1. 模块化与可维护性:绘图逻辑分为多个小模块(树形绘制、彩色球、五角星等),代码结构清晰,易于扩展。

  2. 动态更新效果:利用 Timer 实现每 500 毫秒重新绘制,使树的装饰物呈现动态效果,增加节日氛围。

  3. 随机性与个性化:每次绘制的心形符号和彩色球都具有随机性,使绘图结果多样化。

  4. 高效绘图:使用简单的图形 API(如 fillPolygonfillOval)完成复杂效果。


四、总结

这段代码展示了通过 Java Swing 绘制图形并动态更新内容的能力。其设计充分利用了基本图形绘制函数,结合随机数生成和定时器,营造出一个富有节日氛围的圣诞树动画。通过进一步优化,可以进一步提升视觉效果和代码的扩展性。

写在后面

我是一只有趣的兔子,感谢你的喜欢。


http://www.ppmy.cn/news/1558968.html

相关文章

STM32高级物联网通信之以太网通讯

目录 以太网通讯基础知识 什么是以太网 互联网和以太网的区别 1)概念与范围 (1)互联网 (2)以太网 2)技术特点 (1)互联网 (2)以太网 3)应用场景 (1)互联网 (2)以太网 以太网的层次 1)物理层 2)数据链路层 OSI 7层模型 TCPIP 4层模型 一些常见…

机器学习2-NumPy

ndarray自动广播扩展维度&#xff0c;便于进行行列式&#xff0c;数组计算 # 自动广播机制&#xff0c;1维数组和2维数组相加# 二维数组维度 2x5 # array([[ 1, 2, 3, 4, 5], # [ 6, 7, 8, 9, 10]]) d np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]) # c是一…

GB/T34944-2017 《Java语言源代码漏洞测试规范》解读——安全功能

GB/T34944-2017 《Java语言源代码漏洞测试规范》标准是软件测试实验室开展代码测试活动的重要依据&#xff0c;也是软件测试实验室申请代码测试CNAS/CMA实验室认证时所依据的标准方法。本系列文章一起解读GB/T34944-2017 《Java语言源代码漏洞测试规范》&#xff0c;前面的文章…

Windows 11 系统下,通过 WSL(Windows Subsystem for Linux)里的 Ubuntu 24.04 安装 CUDNN 记录

#记录工作 以下是基于cuDNN官网提供的命令&#xff0c;在 Windows 11 系统下通过 WSL 里的 Ubuntu 24.04 直接用命令安装 CUDNN 的详细步骤&#xff1a; 一、安装前提 确保已经在 Windows 11 中正确配置好 WSL&#xff0c;并且在 WSL 里成功安装了 Ubuntu 24.04 系统&#xff…

【c++笔试强训】(第四十五篇)

目录 ⼩红的⼝罩&#xff08;贪⼼堆&#xff09; 题目解析 讲解算法原理 编写代码 春游&#xff08;模拟-分情况讨论&#xff09; 题目解析 讲解算法原理 编写代码 ⼩红的⼝罩&#xff08;贪⼼堆&#xff09; 题目解析 1.题目链接&#xff1a;登录—专业IT笔试面试备考…

基于Spring Boot的爱老助老服务平台

一、平台背景与意义 随着社会的快速发展和人口老龄化的加剧&#xff0c;老年人的养老问题日益受到关注。传统的养老方式已经难以满足老年人多样化、个性化的需求。因此&#xff0c;开发一个基于Spring Boot的爱老助老服务平台具有重要意义&#xff0c;它可以整合各种养老资源&…

联邦大模型微调

微调&#xff08;Fine-tuning&#xff09;是一种迁移学习的技术&#xff0c;用于在一个已经预训练好的模型基础上&#xff0c;通过进一步训练来适应特定的任务或数据集。微调可以在具有相似特征的任务之间共享知识&#xff0c;从而加快训练速度并提高模型性能。 微调步骤&…

Linux(Centos 7.6)基本信息查看

1.服务器硬件信息查看 1.1.服务器厂商、产品名称查看 dmidecode -s system-manufacturer&#xff1a;查看服务器厂商信息 dmidecode -s system-product-name&#xff1a;查看服务器产品名称信息 1.Windows使用VMware安装的Linux(Centos 7.6)后&#xff0c;服务器厂商、产品名…