Mah*_*leh 9 java swing spring splash-screen windowbuilder
我的主类从文件加载配置然后显示一个框架.我想使用像Eclipse这样的进度条创建一个启动画面,以便在加载文件时进度会增加,并且在加载文件后启动消失.然后我的主框架被加载.
MainClass代码:
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"classpath:/META-INF/spring/applicationContext.xml");
// splash with progress load till this file is loaded
UserDao userDao = context.getBean(UserDao.class);
isRegistered = userDao.isRegistered();
System.out.println("registered: " + isRegistered);
if (isRegistered) {
// progress finish and hide splash
log.debug("user is registered"); // show frame1
} else {
// progress finish and hide splash
log.debug("user is not registered"); // show frame2
}
}
Run Code Online (Sandbox Code Playgroud)
我对Swing没有多少经验,所以请告知如何实现这一目标.
更新:我找到了以下示例,但它没有什么问题:
当计数器达到指定的数字时,它应停在(300),它会一直计数,而不会停止计时器并隐藏启动画面.
我想将计数器绑定到文件加载,因此在加载文件时,加载进度直到文件加载,然后进度完成,启动屏幕消失.
@SuppressWarnings("serial")
@Component
public class SplashScreen extends JWindow {
static boolean isRegistered;
static Log log = LogFactory.getLog(SplashScreen.class);
private static JProgressBar progressBar = new JProgressBar();
private static SplashScreen execute;
private static int count;
private static Timer timer1;
public SplashScreen() {
Container container = getContentPane();
container.setLayout(null);
JPanel panel = new JPanel();
panel.setBorder(new javax.swing.border.EtchedBorder());
panel.setBackground(new Color(255, 255, 255));
panel.setBounds(10, 10, 348, 150);
panel.setLayout(null);
container.add(panel);
JLabel label = new JLabel("Hello World!");
label.setFont(new Font("Verdana", Font.BOLD, 14));
label.setBounds(85, 25, 280, 30);
panel.add(label);
progressBar.setMaximum(50);
progressBar.setBounds(55, 180, 250, 15);
container.add(progressBar);
loadProgressBar();
setSize(370, 215);
setLocationRelativeTo(null);
setVisible(true);
}
public void loadProgressBar() {
ActionListener al = new ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
count++;
progressBar.setValue(count);
if (count == 300) {
timer1.stop();
execute.setVisible(false);
return;
}
}
};
timer1 = new Timer(50, al);
timer1.start();
}
public static void main(String[] args) {
execute = new SplashScreen();
ApplicationContext context = new ClassPathXmlApplicationContext(
"classpath:/META-INF/spring/applicationContext.xml");
UserDao userDao = context.getBean(UserDao.class);
isRegistered = userDao.isRegistered();
if (isRegistered) {
// show frame 1
} else {
// show frame 2
}
}
}
Run Code Online (Sandbox Code Playgroud)当计数器达到指定的数字时,它应停在(300),它会一直计数,而不会停止计时器并隐藏启动画面.
下面的代码似乎工作得很好(有致命的缺陷,计数器可能需要比文件加载更长的时间,反之亦然):
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.HeadlessException;
import java.awt.event.ActionListener;
import javax.swing.*;
public class SplashScreen extends JWindow {
static boolean isRegistered;
private static JProgressBar progressBar = new JProgressBar();
private static SplashScreen execute;
private static int count;
private static Timer timer1;
public SplashScreen() {
Container container = getContentPane();
container.setLayout(null);
JPanel panel = new JPanel();
panel.setBorder(new javax.swing.border.EtchedBorder());
panel.setBackground(new Color(255, 255, 255));
panel.setBounds(10, 10, 348, 150);
panel.setLayout(null);
container.add(panel);
JLabel label = new JLabel("Hello World!");
label.setFont(new Font("Verdana", Font.BOLD, 14));
label.setBounds(85, 25, 280, 30);
panel.add(label);
progressBar.setMaximum(50);
progressBar.setBounds(55, 180, 250, 15);
container.add(progressBar);
loadProgressBar();
setSize(370, 215);
setLocationRelativeTo(null);
setVisible(true);
}
private void loadProgressBar() {
ActionListener al = new ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
count++;
progressBar.setValue(count);
System.out.println(count);
if (count == 300) {
createFrame();
execute.setVisible(false);//swapped this around with timer1.stop()
timer1.stop();
}
}
private void createFrame() throws HeadlessException {
JFrame frame = new JFrame();
frame.setSize(500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
};
timer1 = new Timer(50, al);
timer1.start();
}
public static void main(String[] args) {
execute = new SplashScreen();
}
};
Run Code Online (Sandbox Code Playgroud)
我想将计数器绑定到文件加载,因此在加载文件时,加载进度直到文件加载,然后进度完成,启动屏幕消失.
您应该查看ProgressMonitor并ProgressMonitorInputStream使用,Task然后您可以检查文件何时完全读取并结束SplashScreen.看到这里的一些很棒的教程和解释
| 归档时间: |
|
| 查看次数: |
16237 次 |
| 最近记录: |