java 下雪_如何用JAVA实现下雪场景
看到這個題目,希望大家不要慌忙,從字面上很容易就能看出,我們要用到JFrame框架,然后需要在Frame里面添加雪花,最后讓雪花移動起來。
下面我們來具體分析一下:
首先,我們需要有一個JFrame類,用來加載面板以及運行主方法;
第二,我們需要有一個JPanel類,將雪花加載上去。
第三,需要實現雪花的移動。
如何實現這三個功能呢?帶著問題,我們來看下面的代碼:
MyStarFrame類:
import javax.swing.JFrame;
/**
* 首先我們來創建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("下雪場景實現");//設置框架標題
this.setVisible(true);//設置框架可見性為真,讓框架顯示出來。
}
/**
* 主方法新建了一個frame對象,然后調用了它的addPanel根showMe方法
* @param args
*/
public static void main(String[] args) {
MyStarFrame frame = new MyStarFrame();
frame.addPanel();
frame.showMe();
}
}
SnowPanel類:
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JPanel;
/**
* SnowPanel類繼承于面板類,里面添加的是下雪動作的具體實現。
* @author ChrisYuan
*/
public class SnowPanel extends JPanel{
//定義了兩個整型數組,數組里分別存放雪花在面板里的x、y軸的值
private int[] xx;
private int[] yy;
//定義一個字體數組,目的是為了后面定義雪花的時候,讓雪花有大小的變化
private Font[] fs;
/*
* 下面是panel類構造器,在frame類里面new panel對象的時候,
* 構造方法里面的屬性與方法都會執行或加載。
*/
public SnowPanel(){
xx=new int[300];
yy=new int[300];
//循環300次,產生300組隨機數,保存在xx和yy數組中
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次,產生一種不同大小的字體,保存在fs中
for(int i=0;i
fs[i]=new Font("宋體",Font.BOLD,12+i);
}
}
/*
* paint方法是JPanel里面的一個方法,可以實現在面板里畫東西,
* 這里重寫了paint方法。
*/
public void paint(Graphics g){//g相當于一個畫筆,可以畫許多東西出來
super.paint(g);//繼承父類的paint方法,也就是繼承了paint畫的行為
this.setBackground(Color.BLACK);//這里this代表的是panel
//意為將panel的背景顏色設置為黑色,Color是java里的顏色類
g.setColor(Color.WHITE);//將畫筆的顏色改為白色
/*
* 循環300次,在面板里畫出300顆星星
*/
for(int i=0;i
g.setFont(fs[i%10]);//每十顆星星設置一種不同大小的雪花
g.drawString("*", xx[i], yy[i]);//畫星星
}
}
/*
* 創建一個startDown方法,這個方法里面用匿名內部類的方式新建一個線程,
* 線程里面實現了,雪花移位并且重畫面板的方法。
* 這里稍微提一下線程的問題,程序執行的時候,默認是從main方法開始執行,main方法執行后,
* 就會變成整個程序的主線程,在這里我們又重新定義了一個新的線程在startDown里,這個線程
* 會在main方法調用addPanel的時候加載到內存,主線程不會一直running,系統
* 會非配給主線程與startDown里的線程交替運行的時間,這樣從宏觀來看,兩個線程是并發的,也就是
* 我們認為的同時在執行。
*/
public void startDown(){
//創建一個新的線程對象,并讓他去執行。
new Thread(){
//線程執行是將每個點都下移一個位置
public void run(){//線程,一定要實現他的run方法
//while死循環里面執行的語句,就是下雪場景不斷在更替的動作:坐標位移,重畫,睡
while(true){
for(int i=0;i
yy[i]++;
//判斷一下雪花是否超出下邊界,如果超出邊界,y軸從零開始重新執行下雪
if(yy[i]>=600){
yy[i]=0;
}
}
//重畫面板動作,意味將位移的雪花重新顯現出來
repaint();
//異常處理里面的語句是讓線程停滯10毫秒,保證雪花下降的速度沒有那么快
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}//while end!
}// run end!
}.start();//線程要運行,一定要用start方法來開啟線程
}
}
注:初學Java,代碼難免粗糙,歡迎大家指正~
總結
以上是生活随笔為你收集整理的java 下雪_如何用JAVA实现下雪场景的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信支付java helloworld_
- 下一篇: nbu无法运行java控制台_Netba