本人热爱Java Swing,因此在闲暇之余总是喜欢搜集一些自认为比较“酷”的Swing代码来研究揣摩。昨天,我阅读了两篇文章,它们分别介绍了Java Swing透明和不规则窗体的创建和原理。这些内容是一年半以前我在学校时创作的。在学校的日子里,因为轻松、自由、专注,所以总是让人倍加怀念。这一怀念让我翻出了以前写的许多“烂”代码,好在时至今日我还能勉强看懂。花了一个上午的时间整理了一下,现在我想与大家分享一个模仿NetBeans和MyEclipse启动画面的Java Swing闪屏制作技巧。

使用过NetBeans和MyEclipse的朋友们对它们的启动画面(也叫闪屏)肯定都非常熟悉了。在启动时,它们会向闪屏输出当前初始化的进度信息,包括文字信息和进度条信息。当然,它们之间也有细微的不同之处。仔细观察就能发现,NetBeans的进度条似乎显得不太专业,它只是简单地在闪屏上画一个矩形,然后用红色填充部分区域以表示进度;而MyEclipse则要好多了,它在闪屏上显示的是一个标准的进度条控件。二者优劣无法评断,也不是本文的主题所在。在这里,我将以两篇文章的篇幅分别介绍如何实现NetBeans式的闪屏和MyEclipse式的闪屏。

本文将从原理到代码,详细介绍如何实现NetBeans风格的闪屏。

原理:当Swing程序启动后,虚拟机会根据指定的图片生成一个SplashScreen对象。这个对象会在Swing窗体显示之前出现在屏幕中央,告知用户程序正在努力加载。在程序中,我们可以通过SplashScreen.getSplashScreen()方法获取这个闪屏对象。然后,通过该对象我们又可以得到闪屏的图形对象(Graphics2D对象)。得到这个对象后,接下来就可以借助这个Graphics2D对象在闪屏上绘制各种图形元素,而不仅仅是提示字符和模拟的进度条。

下面是效果图:

最上面的那一行字符串是加载进度提示信息,最下面的红色区域是模拟出来的进度条。当然,它们的位置、形状和颜色都是可以定制的。

好了,下面是相关代码: