diff --git a/designer-realize/src/main/java/com/fr/start/common/SplashPane4WinAndJDK11.java b/designer-realize/src/main/java/com/fr/start/common/SplashPane4WinAndJDK11.java new file mode 100644 index 000000000..fea7deb3c --- /dev/null +++ b/designer-realize/src/main/java/com/fr/start/common/SplashPane4WinAndJDK11.java @@ -0,0 +1,75 @@ +package com.fr.start.common; + +import com.bulenkov.iconloader.IconLoader; +import com.fr.base.BaseUtils; +import com.fr.design.locale.impl.SplashMark; +import com.fr.general.IOUtils; +import com.fr.general.locale.LocaleCenter; + +import javax.swing.Icon; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; + +/** + * @author Yvan + * @version 10.0 + * Created by Yvan on 2020/10/27 + */ +public class SplashPane4WinAndJDK11 extends SplashPane{ + /** + * 启动画面图片路径 + */ + private final String imagePath; + + /** + * 启动画面图片是否使用了两倍图 + */ + private boolean isDouble = false; + + private static final String IMAGE_SPLASH = "splash_10.png"; + + private static final String IMAGE_SPLASH_DOUBLE = "splash_10@2x.png"; + + public SplashPane4WinAndJDK11() { + this.imagePath = getSplashPath4WinAndJdk11(); + } + + private String getSplashPath4WinAndJdk11() { + String path = (String) LocaleCenter.getMark(SplashMark.class).getValue(); + if (path.contains(IMAGE_SPLASH)) { + // 为图片加上"@2x" + String pathOfDouble = path.replace(IMAGE_SPLASH, IMAGE_SPLASH_DOUBLE); + // 某些定制jar里面没有两倍图,判断一下,如果文件不存在,就返回一倍图的path + if (IOUtils.readResource(pathOfDouble) != null) { + this.isDouble = true; + return pathOfDouble; + } + } + return path; + } + + @Override + protected void paintComponent(Graphics g) { + if (!isDouble) { + super.paintComponent(g); + return; + } + BufferedImage image = BaseUtils.readImage(imagePath); + Graphics2D newG = (Graphics2D)g.create(0, 0, image.getWidth(), image.getHeight()); + newG.scale(0.5D, 0.5D); + newG.drawImage(image, 0, 0, null); + newG.scale(1.0D, 1.0D); + newG.dispose(); + paintShowText((Graphics2D) g); + g.dispose(); + } + + @Override + Dimension getSplashDimension() { + Icon icon = IconLoader.getIcon(imagePath); + return isDouble ? new Dimension(icon.getIconWidth() / 2, icon.getIconHeight() / 2) : + new Dimension(icon.getIconWidth(), icon.getIconHeight()); + } +} diff --git a/designer-realize/src/main/java/com/fr/start/common/SplashWindow.java b/designer-realize/src/main/java/com/fr/start/common/SplashWindow.java index aa375c1dc..75ee98858 100644 --- a/designer-realize/src/main/java/com/fr/start/common/SplashWindow.java +++ b/designer-realize/src/main/java/com/fr/start/common/SplashWindow.java @@ -1,6 +1,7 @@ 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; @@ -31,7 +32,12 @@ public class SplashWindow extends JFrame { initTitleIcon(); //slash pane - this.splash = new SplashPane(); + // 如果是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);