用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

java 程序启动画面 (软件启动中显示欢迎画面)

2012-11-24 作者: 程序猿style举报

[java]代码库

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
 
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JWindow;
import javax.swing.SwingUtilities;
 
/**
 * 几乎所有时髦的应用都有一个欢迎屏幕。欢迎屏幕既是宣传产品的方法之一,
 * 而且在长时间的应用启动过程中,欢迎屏幕还用来表示应用正在准备过程中。
 */
 
/**
 * 本例子实现一个欢迎屏幕,常用作应用软件的启动画面。
 */
public class SplashWindow extends JWindow {
    /**
     * 构造函数
     *
     * @param filename
     *            欢迎屏幕所用的图片
     * @param frame
     *            欢迎屏幕所属的窗体
     * @param waitTime
     *            欢迎屏幕显示的事件
     */
    public SplashWindow(String filename, JFrame frame, int waitTime) {
        super(frame);
 
        // 建立一个标签,标签中显示图片。
        JLabel label = new JLabel(new ImageIcon(filename));
        // 将标签放在欢迎屏幕中间
        getContentPane().add(label, BorderLayout.CENTER);
        pack();
        // 获取屏幕的分辨率大小
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        // 获取标签大小
        Dimension labelSize = label.getPreferredSize();
        // 将欢迎屏幕放在屏幕中间
        setLocation(screenSize.width / 2 - (labelSize.width / 2),
                screenSize.height / 2 - (labelSize.height / 2));
        // 增加一个鼠标事件处理器,如果用户用鼠标点击了欢迎屏幕,则关闭。
        addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
                setVisible(false);
                dispose();
            }
        });
 
        final int pause = waitTime;
        /**
         * Swing线程在同一时刻仅能被一个线程所访问。一般来说,这个线程是事件派发线程(event-dispatching thread)。
         * 如果需要从事件处理(event-handling)或绘制代码以外的地方访问UI,
         * 那么可以使用SwingUtilities类的invokeLater()或invokeAndWait()方法。
         */
        // 关闭欢迎屏幕的线程
        final Runnable closerRunner = new Runnable() {
            public void run() {
                setVisible(false);
                dispose();
            }
        };
        // 等待关闭欢迎屏幕的线程
        Runnable waitRunner = new Runnable() {
            public void run() {
                try {
                    // 当显示了waitTime后,尝试关闭欢迎屏幕
                    Thread.sleep(pause);
                    SwingUtilities.invokeAndWait(closerRunner);
                    // SwingUtilities.invokeLater(closerRunner);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        };
        setVisible(true);
        // 启动等待关闭欢迎屏幕的线程
        Thread splashThread = new Thread(waitRunner, "SplashThread");
        splashThread.start();
    }
 
    public static void main(String[] args) {
        JFrame frame = new JFrame("欢迎屏幕");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
 
        SplashWindow splash = new SplashWindow("C:/temp/scenery.jpg", frame,
                2000);
        frame.pack();
        frame.setVisible(true);
    }
}


网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...