[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);
}
}
初级程序员
by: 似秃不秃 发表于:2018-05-21 23:24:01 顶(0) | 踩(0) 回复
没有图吗大佬
回复评论