我创建了一个带有我想要的按钮的JFrame类,所以当你按下按钮时,它会带你进入启动画面而不打开另一个JFrame。但是我该怎么做?我希望新屏幕中间有图像和加载GIF?
答案 0 :(得分:3)
我喜欢做的是使用SwingWorker和JWindow
:
import javax.swing.JFrame;
import javax.swing.JWindow;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
public class Splashscreen {
JWindow window = new JWindow();
public void start() {
window.setSize(400, 300);
// window.pack();
window.setLocationRelativeTo(null);
window.setVisible(true);
new StartWorker().execute();
}
private class StartWorker extends SwingWorker<Void, Void> {
@Override
protected Void doInBackground() throws Exception {
// Do background process
Thread.sleep(2000);
return null;
}
@Override
protected void done() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setSize(640, 480);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
// Dispose window when background process is finished
window.dispose();
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Splashscreen().start();
}
});
}
}
因此,当您实例化Splashscreen
类并调用start
方法JWindow
时,将会显示SwingWorker
并执行JWindow
。将显示JFrame
,直到后台进程(耗时的任务)完成。完成流程后,系统会显示JWindow
,并会处理CardLayout
。
但是!在你的情况下,我建议坚持使用{{1}}作为MadProgrammer在他的回答中说明。
答案 1 :(得分:2)
“我创建了一个带有按钮的JFrame类,我想要它,所以当你 按下按钮,它将带您进入闪屏而无需打开 另一个JFrame。“
因此我们可以假设这意味着您希望使用当前的JFrame
显示启动画面。
您可以使用CardLayout在有效“屏幕”或“面板”之间切换
如果您使用的是gif,最简单的解决方案是通过ImageIcon
加载图片并使用JLabel
进行渲染(假设它是动画gif),否则您可以使用查看Reading/loading an Image到图像(并通过JLabel
显示