Machen splash screen mit progress bar wie Eclipse
Meine main-Klasse lädt die Konfiguration aus einer Datei und zeigt dann einen Rahmen. Ich will ein splash screen mit progress-bar wie Eclipse, so dass der Fortschritt zunehmen wird, während die Datei wird geladen und der splash verschwindet nachdem die Datei geladen ist. Dann ist mein Haupt-frame geladen wird.
MainClass code:
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
}
}
Ich habe nicht viel Erfahrung mit Swing, also bitte beraten, wie Sie erreichen, dass.
UPDATE: ich habe mit der folgenden Beispiel -, aber Sie haben wenig Ausgabe:
-
wenn der Zähler bekommt die angegebene Nummer, es sollte aufhören, bei (300) es hält zählen, für immer, ohne zu stoppen, den timer und ausblenden des splash-screen.
-
ich soll binden die Theke, um die Datei zu laden, so dass, während die Datei geladen wird, wird der Fortschritt wird geladen, bis die Datei geladen wird dann der Fortschritt abgeschlossen ist und der splash screen verschwindet.
@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 } } }
- Haben Sie check out diese Frage? Es hat einige gute links.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den code unten scheint sehr gut zu funktionieren (mit den fatalen Fehler der Zähler kann länger dauern, dann die Datei laden und Umgekehrt):
Sollten Sie einen Blick auf
ProgressMonitor
undProgressMonitorInputStream
mit einemTask
können Sie dann überprüfen, wenn die Datei komplett gelesen und am Ende derSplashScreen
. sehen hier für einige tolle Anleitung und Erklärungtimer1 = new Timer(400, al);
etwas größer. Im Beispiel wird der timer nun alle 0,5 Sekundenif (count == 300)
undthe timer1 = new Timer(50, al);
was jeder von Ihnen tut.Java hat eine eingebaute
SplashScreen
Klasse nur für diesen Zweck. Es gibt ein tutorial auf, wie es zu benutzen hier.