资源简介
java写的一个流星雨小程序【全屏版】是之前发布的java写的一个流星雨小程序全屏幕的版本,自动获取屏幕大小、去除边框、最大化最小化关闭按钮,实现全屏。
代码片段和文件信息
/*
思路 : 在一个黑色的JPanel上画出星星和月亮,星星可以用随机数+循环来画,每个星星其实就是一个白色的小圆(fillOval)
月亮的画法:先画一个白的的圆,再画一个黑色的圆挡住白的的圆一部分,就形成了月牙了
流星的画法:就是画了几根线(drawLine) 当流星飞出界面以后,流星的坐标在一个新的线程中随机改变,达到随机生成流星雨的效果
流星的运动:在线程run()方法内循坏改变Line的坐标
纠结了很久的事情是:在调用repaint方法后,屏幕闪得厉害,在网上搜解决办法是用双重缓冲,由于本人研究得不仔细,花了好长时间才搞顶。。。。。。汗
*/
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.swing.Jframe;
import javax.swing.JPanel;
@SuppressWarnings(“serial“)
public class sky extends Jframe {
JPanel jp1; // 用新的面板来画天空
int rdm1[] = new int[150] rdm2[] = new int[150]; // 两个随机数组用来存放150个随机的横坐标和纵坐标
int a b; // 分别表示星星的 横坐标和纵坐标 a = rdm1[] b = rdm2[] ;
// 这样做得目的是让随机数只产生一次随机的坐标,避免在repaint()的时候星星的坐标会不断改变
int x = 1100 y = 200 x1 = 400 y1 = 100 x2 = 700 y2 = 300 x3 = 300
y3 = 400; // 初始的时候四颗流星的坐标
Random r = new Random(); // 新建一个随机引用
Dimension screensize = Toolkit.getDefaultToolkit().getScreenSize();
int width = (int)screensize.getWidth(); //屏幕尺寸
int height = (int)screensize.getHeight(); //屏幕尺寸
sky() {
init();
}
void init() {
settitle(“流星雨“);
setLocation(0 0);
setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
setSize(width height);
setLayout(null);
setUndecorated(true);
getGraphicsConfiguration().getDevice().setFullScreenWindow(this);
jp1 = new JPanel();
jp1.setLocation(0 0);
jp1.setSize(width height); // 因为本人电脑屏幕大小为 1366*768 这样就全屏了
jp1.setBackground(Color.black); // 把JPanel颜色设置为黑色
setResizable(false); // 设置窗口不可调整大小
// this.getContentPane().setBackground(Color.black);
add(jp1); // 将jp1添加进面板
setVisible(true);
for (int i = 0; i < 150; i++) { // 产生150个随机数,然后赋给两个数组,用作以后分别赋值给150颗星星的横坐标和纵坐标
rdm1[i] = r.nextInt(width);
rdm2[i] = r.nextInt(height);
}
new tt().start(); // 开始新线程,产生流星运动的效果
}
public void paint(Graphics g) {
// 这用到的是双重缓冲,避免面板在重绘的时候不停的闪烁
BufferedImage bf = new BufferedImage(width height 1); // 创建一副缓冲图
Graphics bg = bf.createGraphics(); // 创建缓冲图片的graphics对象
jp1.paint(bg); // 在p1上画出bg
bg.setColor(Color.white);
bg.fillOval(1200 100 80 80); // 画白色的圆
for (int i = 0; i < 150; i++) { // 150颗随机的星星
a = rdm1[i];
b = rdm2[i];
bg.fillOval(a b 3 4);
}
bg.drawLine(x y x + 70 y - 70); // 四颗流星初始位置
bg.drawLine(x1 y1 x1 + 50 y1 - 50); // 四颗流星初始位置
bg.drawLine(x2 y2 x2 + 60 y2 - 60); // 四颗流星初始位置
bg.drawLine(x3 y3 x3 + 60 y3 - 60); // 四颗流星初始位置
bg.setColor(Color.black);
bg.fillOval(1180 85 80 80); // 画黑色的圆挡住之前画的白色的圆的一部分,形成月亮
g.drawImage(bf 0 0 width height jp1);
// 在 g上画出 bf图片(双重缓冲) 也就是把所有图像都画出来了
}
class tt extends Thread {
public void run() {
// 改变流星的坐标达到运动效果
while (true) {
repaint();
x -= 4;
y += 4;
x1 -= 4;
y1 += 4;
x2 -= 4;
y2 += 4;
x3 -= 4;
y3 += 4;
// 当流星飞出界面后,随机为飞出的流星在界面内生成一个新的位
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-05-25 17:25 sky\
文件 4487 2018-05-25 17:25 sky\sky.java
相关资源
- Java画图板课程设计报告只有报告没有
- java 科学型计算器 代码
- 记事本打印和页面设置功能Java实现
- Java写的模拟打电话程序源代码
- java 矢量绘图小程序
- 打砖块小游戏带音效
- NetBetBeans 编写Java调用DLL代码
- 课程设计jsp 新闻发布系统 完整版
- 国密算法sm4的java实现
- java记事本代码及设计方法
- 基于JAVA的飞机大战游戏的设计与实现
- 鞋厂办公系统Java+MySQL含文档
- java贪吃蛇内附详细注释
- 项目源码java项目TT商城
- 日历记事本 java课程设计
- Java实现信息安全技术 密钥分配
- 点阵字库在JAVA中的实现源码
- 基于java实现中国象棋小游戏升级版
- 基于java爬取网络图片并且保存到本地
- Java基础视频传智播客刘意
- LIBSVM工具包可以在weka中使用并被JAV
- 浪潮培训考试大全Java方向试题
- 学生成绩管理系统实验报告内含JAVA程
- java多线程代码demo
- Session-JavaWeb专题
- Java封装的操作MySql数据库框架
- Java 调用Http Rest接口 说明2
- mongo-2.8.0.jar mongoDB 操作JAVA
- javaQQ聊天室+SocketTCP
- java 异常总结
评论
共有 条评论