根据给定的信息,我们可以总结出以下相关知识点: ### 一、Java Swing 框架基础 **Swing** 是 Java 的一个图形用户界面(GUI)工具包。它为开发者提供了丰富的 UI 组件,如按钮、文本框等,并且具有高度可定制性。Swing 提供了比 AWT 更强大的功能,并且支持事件模型、布局管理器、不依赖平台的字体/颜色/图标,以及可插入外观。 - **JFrame 类**:JFrame 类是 Swing 框架中的顶级容器,用来创建窗口程序。通常情况下,一个 Swing 应用程序由一个或多个 JFrame 对象组成。 - **JPanel 类**:JPanel 类是一种容器组件,用来容纳其他组件。它可以包含任何类型的 Swing 或 AWT 组件,并且可以被嵌套到其他容器中。 ### 二、实现“网页下雪”效果的 Java 程序设计 #### 1. MyStarFrame 类 该类继承自 `JFrame` 类,实现了基本的框架搭建和初始化。 - **addPanel() 方法**:用于添加面板(SnowPanel)到当前的 JFrame 对象中。 - **showMe() 方法**:设置窗口的大小、标题、默认关闭操作等,并使窗口可见。 #### 2. SnowPanel 类 该类继承自 `JPanel` 类,主要用于绘制雪片效果。 - **成员变量**: - `int[] xx, yy`:分别表示每个雪花的 x 和 y 坐标。 - `Font[] fs`:存储不同大小的字体,用于模拟不同大小的雪花。 - **构造方法**: - 初始化坐标数组 `xx` 和 `yy`,随机生成 300 个雪花的初始位置。 - 初始化字体数组 `fs`,包含 10 种不同大小的字体。 - **paint() 方法**: - 调用父类的 paint() 方法来准备绘图环境。 - 设置背景色和雪花的颜色。 - 循环遍历每个雪花,使用不同的字体大小绘制雪花字符 “*”。 - **startDown() 方法**: - 创建一个新的线程来执行雪花下落的动画效果。 - 在线程的 run() 方法中循环更新每个雪花的位置。 - 如果雪花到达底部,则将其重置到顶部,形成连续下落的效果。 - 调用 repaint() 方法重新绘制整个面板,显示更新后的雪花位置。 ### 三、关键代码分析 #### 关键点 1: 构造方法 ```java public SnowPanel(){ xx = new int[300]; yy = new int[300]; // 循环 300 次初始化 300 个 x 和 y for (int i = 0; i < xx.length; i++) { xx[i] = (int) (Math.random() * 800); yy[i] = (int) (Math.random() * 600); } fs = new Font[10]; // 循环 10 次初始化 10 种不同大小的字体 for (int i = 0; i < fs.length; i++) { fs[i] = new Font("", Font.BOLD, 12 + i); } } ``` 这段代码初始化了雪花的位置坐标,并通过不同大小的字体来模拟不同大小的雪花,增强了视觉效果的真实性。 #### 关键点 2: startDown() 方法 ```java public void startDown(){ new Thread(){ public void run(){ while (true) { for (int i = 0; i < yy.length; i++) { yy[i]++; if (yy[i] >= 600) { yy[i] = 0; } } repaint(); // 重新绘制整个面板 } } }.start(); } ``` 这段代码通过启动一个新的线程来不断更新雪花的位置,当雪花达到窗口底部时,将其位置重置到顶部,形成了连续下落的效果。同时,调用 `repaint()` 方法使得每次位置更新后都能重新绘制面板,从而显示更新后的雪花位置。 该程序利用 Java Swing 框架提供的强大功能,结合自定义的逻辑实现了一个简单的“网页下雪”效果。通过对 `JFrame` 和 `JPanel` 的继承与扩展,以及对绘图方法的定制,成功地实现了动态的雪景动画。
/**
* 首先我们来创建JFrame类,这个类我们把它称作MyStarFrame,
* 包含一个主方法跟两个成员方法。
* @author ChrisYuan
*
*/
public class MyStarFrame extends JFrame{
/*
* 定义一个成员变量panel,这里我们使用私有属性,
* 为了避免其他类不小心调用它,防止程序出错。
* 很多时候,如果我们不知道属性该定义为什么,最好定义为私有。
*/
private SnowPanel panel;
/*
* addPanel方法,将另一个类也就是我们提到的panel类加载进来。
*/
public void addPanel(){
panel=new SnowPanel();
this.add(panel);//使用this加到frame框架里,在这里this代表的是当前的frame对象
panel.startDown();//调用panel的startDown方法,实现雪从天而降
}
/*
* showMe方法,其实就是将框架显示出来的方法,里面我们定义了几个常用的方.
*/
public void showMe(){
this.setSize(800,600);//设置框架大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置框架在点击右上角关闭按钮的时候会从系统中关闭完全关闭退出
this.setTitle("下雪场景实现");//设置框架标题
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助