首页 / 操作系统 / Linux / Java Swing中的透明窗体(Windows中消息提示框的制作)
首先需要在工程中导包,需要用到JRE中的rt.jar包,我的JDK安装在C盘,目录如下:C:Program FilesJavajre7lib
t.jar。 我们用到的类是rt包中的com.sun.awt.AWTUtilities。(遗憾的是导入该包后,程序就不具有跨平台性了) 程序代码如下:import java.awt.MouseInfo; import java.awt.Point; 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 javax.swing.UnsupportedLookAndFeelException;import com.sun.awt.AWTUtilities;/** * @author zhenyu tan * 2014年4月2日 * 使用到了JDK1.6中新特性的透明窗体,所以必须要使用JDK1.6及其以上版本 * 功能如下: * 1.窗体出现时逐渐清晰 * 2.停留一会时间之后会自动逐渐模糊直至消失 * 3.点击关闭按钮后逐渐模糊直至消失 */ public class TipWindow { JFrame frame; JLabel label; JEditorPane editorPane; private int width;//窗体宽度 private int height;//窗体高度 private int stayTime;//休眠时间 private String title;//消息标题 private String message;//窗体内容 private int style;//窗体样式 static { try { UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel"); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { e.printStackTrace(); } } /** * @param width 提示框宽度 * @param height 提示框高度 * @param stayTime 提示框停留时间 * @param style 提示框的样式 * @param title 提示框标题 * @param message 提示框内容(支持HTML标签) */ public TipWindow(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; } public TipWindow(int stayTime, int style, String title, String message) { this.width = 300; this.height = 100; this.stayTime = stayTime; this.style = style; this.title = title; this.message = message; } public void initialize() { frame = new JFrame(); editorPane = new JEditorPane(); editorPane.setEditable(false); editorPane.setContentType("text/html"); editorPane.setText(message); frame.add(editorPane); frame.setTitle(title); //设置窗体的位置及大小 Point location = MouseInfo.getPointerInfo().getLocation(); frame.setBounds((int)location.getX(), (int)location.getY(), width, height); frame.setUndecorated(true);//去掉窗口的装饰 frame.getRootPane().setWindowDecorationStyle(style);//设置窗体样式 AWTUtilities.setWindowOpacity(frame, 0);//初始化透明度 frame.setVisible(true); frame.setAlwaysOnTop(true);//窗体置顶 frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { hide(); } }); } //窗体逐渐变清晰 public void show() { for (int i = 1; i < 20; i++) { try { Thread.sleep(50); } catch (Exception e) { AWTUtilities.setWindowOpacity(frame, i * 0.05F); } } } //窗体逐渐变淡甚至消失 public void hide() { float opacity = 100; while(true) { if (opacity < 2) { break; } opacity -= 2; AWTUtilities.setWindowOpacity(frame, opacity / 100); try { Thread.sleep(150); } catch (Exception e) { e.printStackTrace(); } } frame.dispose(); } public void run() { initialize(); show(); try { Thread.sleep(stayTime * 1000); } catch (Exception e) { e.printStackTrace(); } hide(); } public static void main(String[] args) { String title = "友情提示!"; String message = "主人!<br />该休息了!"; TipWindow tipWindow = new TipWindow(2, JRootPane.QUESTION_DIALOG, title, message); tipWindow.run(); } }
收藏该网址