【发布时间】:2015-07-29 13:38:30
【问题描述】:
我有这个 createAndShowGui() 类,它从另一个方法调用初始屏幕并创建一个用于主应用程序的 JFrame。我一直在试图弄清楚如何在启动画面可见时隐藏 JFrame。
我试过用一个
if (splash.isVisible()){
frame.setVisible(false)
}
else { frame.setVisible(true)
}
这不起作用。实现这一目标的最佳方法是什么?
private static void createAndShowGui() {
DrawPanelMain mainPanel = new DrawPanelMain();
JFrame frame = new JFrame("RF Connection Panel " + version);
SwingMenu mainBar = new SwingMenu();
Splash splash = new Splash("C:\\Users\\Rob\\splashscreen.gif", frame, 8000);
splash.setVisible(true);
frame.setJMenuBar(mainBar);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
Splash.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
/*
* This class creates a splash screen that is displayed when the program is run. It includes thread management,
* mouse adapter, and runs with a JWindow on top of the JFrame for the overall application.
*/
public class Splash extends JWindow {
public Splash(String filename, Frame f, int waitTime) {
super(f);
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;
final Runnable closerRunner = new Runnable() {
public void run() {
setVisible(false);
dispose();
}
};
Runnable waitRunner = new Runnable() {
public void run(){
try {
Thread.sleep(pause);
SwingUtilities.invokeAndWait(closerRunner);
}
catch (Exception e){
JOptionPane.showMessageDialog(null, e.getStackTrace());
}
}
};
setVisible(true);
Thread splashThread = new Thread(waitRunner, "SplashThread");
splashThread.start();
}
}
【问题讨论】:
-
你能告诉我一些关于你的 Splash 课程吗?
-
@bodidely splash(字符串图像名称、帧名称、直到睡眠的 int 时间)
-
@feltersnach 你的问题很不清楚..你能显示 splach 类的相关代码
标签: java swing splash-screen