在这个程序的实现中最主要有以下几点:

  1. 实现JFrame窗口透明到桌面
  2. 启用多线程实现屏保重画
  3. 设置鼠标监听,可以实现鼠标一动就退出屏保

实现了以上两点,代码如下:

  1. 窗口类
import javax.swing.JFrame;

import com.sun.awt.AWTUtilities;//实现窗口透明很重要的一个包

public class MyJFrame extends JFrame{
	public MyJFrame(){
		this.setSize(1366, 768);//设置大小,即当前分辨率,可以手动设置,也可以自动获取
		this.setUndecorated(true);//禁用或启动用此JFrame装饰 
		this.setLocationRelativeTo(null);//默认窗口居中对齐
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);设置用户在此窗体上发起 "close" 时默认执行的操作
		MyJPanel p = new MyJPanel();
		AWTUtilities.setWindowOpaque(this, false);//flase设置透明反之不透明
		this.add(p);
		p.setBackground(null); //将背景色设置为空
		p.setOpaque(false);//将背景设置为透明
		this.setVisible(true);
		p.move();//调用用线程实现的画布移动功能
		try {
			Thread.sleep(500);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		this.addMouseMotionListener(p);//注册鼠标监听器
	}
	public static void main(String[] args) {
		new MyJFrame();
	}

  
  

 

}

           2.画布类

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.Random;

import javax.swing.*;

public class MyJPanel extends JPanel implements MouseMotionListener{

	@Override
	public void paint(Graphics g) {
		Image image = new ImageIcon("snowflower.png").getImage();
		Random r = new Random();//利用随机数来控制屏保出现位置
		for(int i = 0; i < 30; i++){
			int x = r.nextInt(1366)-50;
			int y = r.nextInt(768) - 50;
			g.drawImage(image, x,  y, null);
		}

	}
	
	public void move(){
		new Thread(){//新建一个线程
			public void run(){
				while(true){
					repaint();//重画,实现画布移动效果
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}.start();
	}

	@Override
	public void mouseDragged(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseMoved(MouseEvent e) {
		//重写,监听到此动作,执行以下语句退出程序
		System.exit(0);
	}
}