为了账号安全,请及时绑定邮箱和手机立即绑定

简易动画星空 《Java就该这样学》

标签:
Java

一共俩个class
测试类 与画布类
其中线程开启需要在测试类里面
用Thread包装应用了Runnable接口的类
并且开启线程
java不允许在窗口Frame上直接画图所以需要画布Panel
生成画布对象后添加到窗口里面 add()

package huawangba;

import java.awt.*;

public class MyTestm {
 public static void main(String[] args){

     Frame w = new Frame();
     w.setSize(1920, 1080);
     w.setBackground(Color.BLACK);
     MyPanel mp = new MyPanel();
     Thread t= new Thread(mp);
     t.start();
     w.add(mp);
     w.show();
 }
}

画布类继承了Runnable接口 可以开启线程

package huawangba;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Panel;

public class MyPanel extends Panel implements Runnable{
    int x[] =new int[300];
    int y[] =new int [300];
    public MyPanel(){
        for(int i=0;i<300;i++){
            x[i]=(int)(Math.random()*1920);
            y[i]=(int)(Math.random()*1080);
        }

    }
    @Override
    public void paint(Graphics g) {
        // TODO Auto-generated method stub
        super.paint(g);
        g.setColor(Color.WHITE);
        g.drawLine(30, 40, 50, 60);
        for(int i=0;i<300;i++){

            g.drawString("*", x[i], y[i]);

        }

    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(true){
            repaint();
            try {
                for(int i =0;i<300;i++){
                    y[i]++;
                if  (y[i]>1080)
                    y[i]=0;
                }

                Thread.sleep(30);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

}

Thread.sleep();存在睡死风险 需用trycatch块包围
repaint()请求向系统发出重画请求系统调用paint()应用更改画新图

点击查看更多内容
16人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消