102 lines
3.0 KiB
102 lines
3.0 KiB
package com.fr.start.common; |
|
|
|
import com.fr.design.fun.OemProcessor; |
|
import com.fr.design.jdk.JdkVersion; |
|
import com.fr.design.utils.gui.GUICoreUtils; |
|
import com.fr.general.IOUtils; |
|
import com.fr.log.FineLoggerFactory; |
|
import com.fr.stable.image4j.codec.ico.ICODecoder; |
|
import com.fr.stable.os.OperatingSystem; |
|
import com.fr.start.OemHandler; |
|
import javax.swing.*; |
|
import java.awt.*; |
|
import java.awt.image.*; |
|
import java.io.IOException; |
|
import java.util.List; |
|
|
|
/** |
|
* 启动画面窗口 |
|
* |
|
* @author vito |
|
* @version 10.0 |
|
* Created by vito on 2019/10/16 |
|
*/ |
|
public class SplashWindow extends JFrame { |
|
|
|
private SplashPane splash; |
|
|
|
public SplashWindow() { |
|
// alex:必须设置这个属性为true,才可以用透明背景 |
|
System.setProperty("sun.java2d.noddraw", "true"); |
|
|
|
initTitleIcon(); |
|
|
|
//slash pane |
|
// 如果是Windows + JDK版本大于等于9时,一倍图启动会很模糊,这边使用两倍图 |
|
if (OperatingSystem.isWindows() && JdkVersion.GE_9.support()) { |
|
this.splash = new SplashPane4WinAndJDK11(); |
|
} else { |
|
this.splash = new SplashPane(); |
|
} |
|
|
|
splash.setBackground(null); |
|
this.setContentPane(splash); |
|
this.setSize(splash.getSplashDimension()); |
|
|
|
this.setAlwaysOnTop(false); |
|
this.setUndecorated(true); |
|
//使窗体背景透明 |
|
if (OperatingSystem.isWindows()) { |
|
this.setBackground(new Color(0, 0, 0, 0)); |
|
} |
|
|
|
GUICoreUtils.centerWindow(this); |
|
} |
|
|
|
/** |
|
* 设置任务栏图标,主要用于Windows |
|
*/ |
|
@SuppressWarnings("unchecked") |
|
private void initTitleIcon() { |
|
try { |
|
OemProcessor oemProcessor = OemHandler.findOem(); |
|
List<BufferedImage> image = null; |
|
if (oemProcessor != null) { |
|
try { |
|
image = oemProcessor.createTitleIcon(); |
|
} catch (Throwable e) { |
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
|
} |
|
} |
|
if (image == null) { |
|
image = ICODecoder.read(SplashWindow.class |
|
.getResourceAsStream("/com/fr/base/images/oem/logo.ico")); |
|
} |
|
this.setIconImages(image); |
|
} catch (IOException e) { |
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
|
this.setIconImage(IOUtils.readImage("/com/fr/base/images/oem/logo.png")); |
|
} |
|
} |
|
|
|
/** |
|
* 注销窗口 |
|
*/ |
|
@Override |
|
public void dispose() { |
|
super.dispose(); |
|
} |
|
|
|
/** |
|
* 设置在启动过程中, 动态改变的文本, 如 当前启动的模块信息 |
|
* |
|
* @param text 指定的文本 |
|
*/ |
|
void updateModuleLog(String text) { |
|
splash.updateModuleLog(text); |
|
} |
|
|
|
void updateThanksLog(String text) { |
|
splash.updateThanksLog(text); |
|
} |
|
}
|
|
|