java 能否实现桌面下雪花的效果?使用swing?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 能否实现桌面下雪花的效果?使用swing?相关的知识,希望对你有一定的参考价值。

如题,请高手作答。如果可以,使用那些类,最好有源代码

/*
*实现在窗体上随机布满300个雪花("*"),滚动
*在上次的课基础上增加了for循环(一次要产生300个变量),随机数,数组 ;
*下面的序号为步骤
*/ import java.awt.* ; //(3)导入awt包
public class Star
public static void main(String args[])
Frame w = new Frame() ; //(1)绘制窗体
w.setSize(1024,768) ; //(4)把窗体布满全屏
w.setBackground(Color.BLACK) ; //(5)背景为黑颜色

MyPanel mp = new MyPanel() ; //(7)把MyPanel对象mp,添加到窗体w上
w.add(mp) ;

Thread t = new Thread(mp) ;
t.start() ; //(12)启动线程

w.show(); //(2)显示窗体


//(6)继承Panel类
class MyPanel extends Panel implements Runnable //(11)实现Runnable接口
int x[] = new int[300] ;
int y[] = new int[300] ; //(8)定义300个数组变量 MyPanel()
for(int i = 0;i < 300; i++)
x[i] = (int)(Math.random()*1024) ;
y[i] = (int)(Math.random()*768) ; //(9)当程序走到第6步的时候程序就会调用构成函数
//由于随机数是从0-1之间的数任意产出所以x乘以1024,y乘以768再转换为int类型

public void paint(Graphics g)

for(int i = 0;i < 300; i++)
g.setColor(Color.WHITE) ;
g.drawString("*",x[i],y[i]) ;
//g.drawString("*",30,30) ;(7)绘制一个星星在屏幕的x=30,y=30的位置上
//(10)绘制300个雪花,把坐标30,30,改成x[i],y[i] ;
//做到这步可以实现在黑色的天空布满300个星星

public void run()
while(true) //(13)实现产生300个雪花往下落死循环

for(int i = 0 ; i < 300; i++)
y[i]++ ; //(14)y坐标不断的+1
if(y[i] > 768) //(18)如果y轴坐标大于768时,则y = 0,回到窗体的顶部
y[i] = 0 ;


try //(16)用try,catch解决线程休眠的异常

Thread.sleep(20) ; //(15)在每次y轴坐标+1后线程休眠20毫秒
catch(Exception e)
repaint() ; //(17)雪花在新的位置重画


参考技术A 应该不行吧!

WPF桌面下雪效果

寄存在canvas面板,目前缺点就是开始的时候效果有点别扭。

直接贴代码:

技术分享图片
 1         void StartSnowing(Canvas panel)
 2         {
 3             Random random = new Random();
 4             Task.Factory.StartNew(new Action(() =>
 5             {
 6                 for (int j = 0; j < 10; j++)
 7                 {
 8                     Thread.Sleep(j * 100);
 9                     Dispatcher.Invoke(new Action(() =>
10                     {
11                         int snowCount = random.Next(0, 20);
12                         for (int i = 0; i < snowCount; i++)
13                         {
14                             int width = random.Next(10, 20);
15                             PackIconFontAwesome pack = new PackIconFontAwesome()
16                             {
17                                 Kind = PackIconFontAwesomeKind.SnowflakeRegular,
18                                 Width = width,
19                                 Height = width,
20                                 Foreground = Brushes.White,
21                                 BorderThickness = new Thickness(0),
22                                 RenderTransform = new RotateTransform(),
23                             };
24                             int left = random.Next(0, (int)panel.ActualWidth);
25                             Canvas.SetLeft(pack, left);
26                             panel.Children.Add(pack);
27                             int seconds = random.Next(10, 20);
28                             DoubleAnimationUsingPath doubleAnimation = new DoubleAnimationUsingPath()
29                             {
30                                 Duration = new Duration(new TimeSpan(0, 0, seconds)),
31                                 RepeatBehavior = RepeatBehavior.Forever,
32                                 PathGeometry = new PathGeometry(new List<PathFigure>() { new PathFigure(new Point(left, 0), new List<PathSegment>() { new LineSegment(new Point(left, panel.ActualHeight), false) }, false) }),
33                                 Source = PathAnimationSource.Y
34                             };
35                             pack.BeginAnimation(Canvas.TopProperty, doubleAnimation);
36                             DoubleAnimation doubleAnimation1 = new DoubleAnimation(360, new Duration(new TimeSpan(0, 0, 10)))
37                             {
38                                 RepeatBehavior = RepeatBehavior.Forever,
39 
40                             };
41                             pack.RenderTransform.BeginAnimation(RotateTransform.AngleProperty, doubleAnimation1);
42                         }
43                     }));
44                 }
45             }));
46         }
View Code

 

以上是关于java 能否实现桌面下雪花的效果?使用swing?的主要内容,如果未能解决你的问题,请参考以下文章

安卓手机下雪效果怎么设置?

java swing 怎么实现换界面的效果

[js高手之路]html5 canvas动画教程 - 下雪效果

java 如何做系统锁定,解锁后回到锁定前的页面?

java 做桌面程序 都有哪些好的框架 是否都是封装java swing 的??

Java中如何实现进度条效果