我使用JWindow在应用程序启动期间显示我的闪屏。然而,它不会出现在所有的窗口前,因为它应该,它也不会消失。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JWindow;
public class MySplash {
public static MySplash INSTANCE;
private static JWindow jw;
public MySplash(){
createSplash();
}
private void createSplash() {
jw = new JWindow();
JPanel content = (JPanel) jw.getContentPane();
content.setBackground(Color.white);
// Set the window's bounds, centering the window
int width = 328;
int height = 131;
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
int x = (screen.width - width) / 2;
int y = (screen.height - height) / 2;
jw.setBounds(x, y, width, height);
// Build the splash screen
JLabel label = new JLabel(new ImageIcon("splash.jpg"));
JLabel copyrt = new JLabel("SplashScreen Test",
JLabel.CENTER);
copyrt.setFont(new Font("Sans-Serif", Font.BOLD, 12));
content.add(label, BorderLayout.CENTER);
content.add(copyrt, BorderLayout.SOUTH);
Color oraRed = new Color(156, 20, 20, 255);
content.setBorder(BorderFactory.createLineBorder(oraRed, 0));
}
public synchronized static MySplash getInstance(){
if(INSTANCE==null){
INSTANCE = new MySplash();
}
return INSTANCE;
}
public void showSplash(){
jw.setAlwaysOnTop(true);
jw.toFront();
jw.setVisible(true);
return;
}
public void hideSplash(){
jw.setAlwaysOnTop(false);
jw.toBack();
jw.setVisible(false);
return;
}
}
在扩展JFrame的主类中,我用
来命名闪屏 SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
MySplash.getInstance().showSplash();
}
});
但是,JWindow出现在我计算机上所有打开的windows实例的后面。隐藏JWindow也不起作用
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
MySplash.getInstance().hideSplash();
}
});
您可能想看看java.awt.SplashScreen
。但是,如果您下定决心要解决这个问题:
看Window#toFront
如果此窗口是可见的,则将此窗口移到前面并可能设置为聚焦窗口
试着让你的JWindow
可见之前把它带到前面。
我不知道为什么你的JWindow
不隐藏,那部分为我工作。
/e1
如果你想实现一个单例模式,你应该把构造函数和字段设为私有。您可能还想看看在Java中实现单例模式的有效方法是什么?
/e2 showSplash
和hideSplash
方法末尾的return
s是不必要的,无论如何该方法都会在那个点返回。