swing Splash Screen

原创
2011/12/08 15:26
阅读数 776

关于登陆之前的那个欢迎屏幕,很多人都是用一个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之后运行才会有效果。


展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部