📄 splashwindow.java
字号:
package purchase;
///created on 2007-11-15 21:00
///test ok!!!
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
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 {
private static final long serialVersionUID = 1L;
/**
* 构造函数
* @param filename 欢迎屏幕所用的图片
* @param frame 欢迎屏幕所属的窗体
* @param waitTime 欢迎屏幕显示的事件
*/
public SplashWindow(String filename,JFrame frame, int waitTime) {
super(frame);
//首先让所属的窗口不显示
frame.setVisible(false);
// 建立一个标签,标签中显示图片。
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));
//pause 为启动画面显示的时间
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();
}
};
// 等待关闭欢迎屏幕的线程
//f是为了显示所属的JFrame为声明的,因为内部类中不可引用外部类非final的成员
final JFrame f=frame;
Runnable waitRunner = new Runnable() {
public void run() {
try {
// 当显示了waitTime后,尝试关闭欢迎屏幕
Thread.sleep(pause);
SwingUtilities.invokeAndWait(closerRunner);
f.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
};
setVisible(true);
//启动等待关闭欢迎屏幕的线程
Thread splashThread = new Thread(waitRunner, "SplashThread");
splashThread.start();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -