用户注册



邮箱:

密码:

用户登录


邮箱:

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

发表随想


还能输入: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、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

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

加载中,请稍后...