首页>代码>java swing屏幕右下角出现渐隐渐显的提示框>/TranslucentFrame/src/com/util/TranslucentFrame/TranslucentFrame.java
package com.util.TranslucentFrame;

import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRootPane;
import javax.swing.UIManager;
import com.sun.awt.AWTUtilities;

/**
 * 屏幕右下角出现渐隐渐显的提示框
 * 使用到了JDK1.6中新特性的透明窗体,所以必须要使用JDK1.6或以上版本的JDK
 * 功能如下:
 * 1.窗体出现时逐渐清晰
 * 2.停留一会儿时间之后会自动逐渐模糊直至消失
 * 3.点击关闭按钮后逐渐模糊直至消失
 * 4.提示内容支持html标签
 *
 */
public class TranslucentFrame implements Runnable {
	JFrame frame;
	JLabel label1;
	JEditorPane editorPane1;
	private int width;//窗体宽度
	private int height;//窗体高度
	private int stayTime;//休眠时间
	private String title, message;//消息标题,内容
	private int style;//窗体样式
	static {
		try {
			UIManager
					.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
		} catch (Exception e1) {
			e1.printStackTrace();
		}
	}

	/**
	 * 渐隐渐显的提示框
	 * 
	 * @param width     提示框宽度
	 * @param height    提示框高度
	 * @param stayTime  提示框停留时间
	 * @param style     提示框的样式
	 * 以下为样式可选值:
	 * 0    NONE                  无装饰(即去掉标题栏)
	 * 1    FRAME                 普通窗口风格
	 * 2    PLAIN_DIALOG          简单对话框风格
	 * 3    INFORMATION_DIALOG    信息对话框风格
	 * 4    ERROR_DIALOG          错误对话框风格
	 * 5    COLOR_CHOOSER_DIALOG  拾色器对话框风格
	 * 6    FILE_CHOOSER_DIALOG   文件选择对话框风格
	 * 7    QUESTION_DIALOG       问题对话框风格
	 * 8    WARNING_DIALOG        警告对话框风格
	 * @param title     提示框标题
	 * @param message   提示框内容(支持html标签)
	 */
	public TranslucentFrame(int width, int height, int stayTime, int style,
			String title, String message) {
		this.width = width;
		this.height = height;
		this.stayTime = stayTime;
		this.style = style;
		this.title = title;
		this.message = message;
	}

	/**
	 * 渐隐渐显的提示框
	 * 
	 * @param style     提示框样式同上
	 * @param title     提示框标题
	 * @param message   提示框内容
	 */
	public TranslucentFrame(int style, String title, String message) {
		this.width = 250;
		this.height = 180;
		this.stayTime = 5;
		this.style = style;
		this.title = title;
		this.message = message;
	}

	public static void main(String[] args) {
		String title = "友情提示!";
		String message = "<strong>JDK1.6新特性测试</strong><br>《透明窗体》<br>www.oschina.net<br>CSDN";
		//      Runnable translucent=new TranslucentFrame(250,180,10,4,title,message);
		Runnable translucent = new TranslucentFrame(2, title, message);
		Thread thread = new Thread(translucent);
		thread.start();
	}

	public void print() {
		frame = new JFrame();
		editorPane1 = new JEditorPane();
		editorPane1.setEditable(false);//不可编辑
		editorPane1.setContentType("text/html");//将编辑框设置为支持html的编辑格式
		editorPane1.setText(message);
		frame.add(editorPane1);
		frame.setTitle(title);
		//设置窗体的位置及大小
		int x = Toolkit.getDefaultToolkit().getScreenSize().width
				- Toolkit.getDefaultToolkit().getScreenInsets(
						frame.getGraphicsConfiguration()).right - width - 5;
		int y = Toolkit.getDefaultToolkit().getScreenSize().height
				- Toolkit.getDefaultToolkit().getScreenInsets(
						frame.getGraphicsConfiguration()).bottom - height - 5;
		frame.setBounds(x, y, width, height);
		frame.setUndecorated(true); // 去掉窗口的装饰
		frame.getRootPane().setWindowDecorationStyle(style); //窗体样式 
		frame.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG); //窗体样式 
		AWTUtilities.setWindowOpacity(frame, 0.01f);//初始化透明度
		frame.setVisible(true);
		frame.setAlwaysOnTop(true);//窗体置顶
		//添加关闭窗口的监听
		frame.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				hide();
			}
		});
	}

	/**
	 * 窗体逐渐变清晰
	 *
	 */
	public void show() {
		for (int i = 0; i < 50; i++) {
			try {
				Thread.sleep(50);
			} catch (Exception e) {
			}
			AWTUtilities.setWindowOpacity(frame, i * 0.02f);
		}
	}

	/**
	 * 窗体逐渐变淡直至消失
	 *
	 */
	public void hide() {
		float opacity = 100;
		while (true) {
			if (opacity < 2) {
				System.out.println();
				break;
			}
			opacity = opacity - 2;
			AWTUtilities.setWindowOpacity(frame, opacity / 100);
			try {
				Thread.sleep(20);
			} catch (Exception e1) {
			}
		}
		frame.hide();
		System.exit(0);
	}

	public void run() {
		print();
		show();
		try {
			Thread.sleep(stayTime * 1000);
		} catch (Exception e) {
		}
		hide();
	}
}

最近下载更多
微信网友_6608533750566912  LV2 2023年8月16日
微信网友_5852742079762432  LV6 2022年3月20日
sohu1979  LV22 2022年1月25日
baoxing567  LV9 2021年3月30日
ssh0  LV11 2020年5月9日
tzjj89757  LV4 2019年12月10日
yongzheng132  LV17 2019年6月24日
飞翔的企鹅嗯嗯  LV11 2019年1月29日
liuhai1108  LV6 2019年1月25日
南宫家的祎凡  LV1 2018年12月12日
最近浏览更多
neitheraaa  LV2 3月11日
fesfefe  LV13 2023年11月25日
微信网友_6608533750566912  LV2 2023年8月16日
locklock  LV2 2022年7月13日
Cold_sangs  LV3 2022年6月6日
liys1234  LV9 2022年4月22日
微信网友_5852742079762432  LV6 2022年3月19日
sohu1979  LV22 2022年1月25日
贾旭明 2021年12月15日
暂无贡献等级
wjh12345654321  LV14 2021年11月10日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友