关于登陆之前的那个欢迎屏幕,很多人都是用一个JWindow来使用,其实java本身具备了这样的机制,关于使用JWindow可以看看我那个Frame透明和形状也可以达到一个好的效果。不过JVM提供的比较好,内容如下。
主要来自于http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/splashscreen/。
但是哪里的代码好有点问题,我的是jdk7。不知道是不是这个原因,我修改之后的代码。
//http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/splashscreen/
public class SplashTest extends Frame implements ActionListener {
static void renderSplashFrame(Graphics2D g, int frame) {
final String[] comps = {"foo", "bar", "baz"};
g.setComposite(AlphaComposite.Clear);
String str = "Loading " + comps[(frame / 5) % 3] + "...";
g.fillRect(465, 384, 355, 250);
g.setPaintMode();
g.setColor(Color.WHITE); /*清空上一次存留 这几个坐标可能和分辨率有关,这个只是我机器分辨率,直接复制代码可能有问题*/
g.fillRect(130, 200 - 10, 150, 14);
g.setColor(Color.red); //红色进度
g.fillRect(130, 200 - 10, (frame * 10) % 280, 14);
g.setColor(Color.BLACK); //进度信息
g.drawString(str, 130, 200);
}
public SplashTest() {
super("SplashScreen demo");
setSize(500, 300);
setLayout(new BorderLayout());
Menu m1 = new Menu("File");
MenuItem mi1 = new MenuItem("Exit");
m1.add(mi1);
mi1.addActionListener(this);
MenuBar mb = new MenuBar();
setMenuBar(mb);
mb.add(m1);
final SplashScreen splash = SplashScreen.getSplashScreen();
if (splash == null) {
System.out.println("SplashScreen.getSplashScreen() returned null");
return;
}
Graphics2D g = (Graphics2D) splash.createGraphics();
System.out.println("splash rect :" + splash.getBounds());
System.out.println("splash size :" + splash.getSize());
if (g == null) {
System.out.println("g is null");
return;
}
for (int i = 0; i < 10; i++) {
splash.update();
renderSplashFrame(g, i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
}
splash.close();
setVisible(true);
toFront();
}
public void actionPerformed(ActionEvent ae) {
System.exit(0);
}
public static void main(String args[]) {
SplashTest test = new SplashTest();
}
}
注意点:
1.需要在manifest.mf文件里加上
Main-Class: SplashTest //主类
SplashScreen-Image: splashtest_350W.gif //图片,可以使添加动画图片,图片目录和java文件是同一个目录。
2.不能在IDE里运行,需要打包jar之后运行才会有效果。