Java小程序动态雪花屏保

##Java动态雪花屏保
关于Java的一个项目代码,适用于代码小白参考:
界面框架代码:

import javax.swing.JFrame;
import com.sun.awt.AWTUtilities;

public class ScreenFrame {
   public static void main(String[] args){
	   JFrame f=new JFrame();
	   ScreenPanel p=new ScreenPanel();
	   f.add(p);
	   f.setSize(1366, 768);
	   f.setUndecorated(true);//去边框
	   AWTUtilities.setWindowOpaque(f, false);//透明设置
	   f.setLocationRelativeTo(null);//居中
	   f.setDefaultCloseOperation(3);
	   f.setVisible(true); 
	   f.setTitle("屏幕保护");
	   f.addMouseListener(p);//注册鼠标监听器
	   f.addKeyListener(p);
	   f.addMouseMotionListener(p);
	   p.move();
   }   
}

画板代码:

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.ImageIcon;
import javax.swing.JPanel;
//ctrl+d 删除
//ctrl +shift+o导包
//单继承多实现
@SuppressWarnings("serial")
public class ScreenPanel extends JPanel implements MouseListener,KeyListener,MouseMotionListener{
	
	int x=200,y=300;
	//定义一个数组来管理雪花x的坐标
	int[] bx=new int[100];
	//定义一个数组来管理雪花y的坐标
	int[] by=new int[100];
	//定义一个数组来管理小球的路径
	int dir[] =new int [100];
	//初始化:赋值在构造方法中
	//语法:public 类名(){} 没有返回值 方法名和类名一样。
	public ScreenPanel(){
		for(int i=0;i<bx.length;i++){
			bx[i]=(int)(Math.random()*1366);
			by[i]=(int)(Math.random()*768);
			dir[i]=(int)(Math.random()*4)+1;}
		}
	
	public void paint(Graphics g){//画笔 Graphics
		super.paint(g);
		setBackground(Color.WHITE);
		setOpaque(false);//透明设置
		//Font f=new Font("楷体",Font.PLAIN,24);创建字体对象
		//g.setFont(f);设置字体
		g.setFont(new Font("微软雅黑",Font.PLAIN,24));
		g.setColor(Color.RED);
	    for(int i=1;i<50;i++)
	   {
	       g.setColor(Color.WHITE);
	       g.setFont(new Font("宋体",Font.PLAIN,25));
	       //g.drawString("*",a,b);
	       Image img=new ImageIcon("src/2.png").getImage();
		    g.drawImage(img,bx[i], by[i], null);   } 
	   }
	//自定义方法
	public void move(){
		//匿名内部类
		new Thread(){
	    public void run(){
		 while(true){
		 //改坐标 
		 for(int i=1;i<100;i++){
			    if (dir[i] == 1) {
					bx[i] += 10;
					by[i] += 10;}
			  
				if (dir[i] == 2){
					bx[i] -= 10;
					by[i] += 10;}
				
				if (dir[i] == 3) {
					bx[i] -= 10;
					by[i] -= 10;}
				
				if (dir[i] == 4) {
					bx[i] += 10;
					by[i] -= 10;}
				//边界值
				if (bx[i] > 1366) {
					if (dir[i] == 1) {
						dir[i] = 2;}
					if (dir[i] == 4) {
						dir[i] = 3;}}
				
				if (bx[i]<0) {
					if (dir[i] == 2) {
						dir[i] = 1;}
					if (dir[i] == 3) {
						dir[i] = 4;}}
				
				if (by[i]>768) {
					if (dir[i] == 1){
						dir[i] = 4;}
					if (dir[i] == 2){
						dir[i]= 3;}}
				
				if (by[i]<0) {
					if (dir[i] == 4){
						dir[i] = 1;}
					if (dir[i] == 3){
						dir[i] = 2;}}}
			 repaint();
			 try{
			 //休眠
			 Thread.sleep(50);}
			 catch(InterruptedException e){
		 e.printStackTrace();}} }}.start();}
	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO 自动生成的方法存根
		//点击鼠标退出
		System.exit(0);
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO 自动生成的方法存根
		
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO 自动生成的方法存根
		
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO 自动生成的方法存根
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO 自动生成的方法存根
		
	}
	@Override
	public void keyTyped(KeyEvent e) {
		// TODO 自动生成的方法存根
		
	}
	@Override
	public void keyPressed(KeyEvent e) {
		// TODO 自动生成的方法存根
		System.exit(0);
	}
	@Override
	public void keyReleased(KeyEvent e) {
		// TODO 自动生成的方法存根
		
	}

	@Override
	public void mouseDragged(MouseEvent e) {
		// TODO 自动生成的方法存根
		System.exit(0);
	}

	@Override
	public void mouseMoved(MouseEvent e) {
		// TODO 自动生成的方法存根
	}
}

一些笔记也分享给大家:

//线程Thread Runnable

/*

  • 1.继承线程
  • 2.重写run方法
  • 3.创建线程,调用start方法启动线程。
  • 1.实现Runnable接口
  • 2.重写run方法
  • 3.创建Runnable实例(对象),并创建Thread线程,然后以参数的形式传递Thread线程。
  • 4.调用Thread的start方法。
  • 基本数据类型8种:
  • 1整数:byte 1个字节 short 2个字节 int 4个字节 long 8个字节
  • 2.char
  • 3.小数: float , double.
  • 4.boolean:true flase
  • 引用数据类型:String

猜你喜欢

转载自blog.csdn.net/weixin_42496413/article/details/83542023