La mia classe principale carica la configurazione da un file quindi mostra una cornice. Voglio fare uno splash screen con una barra di avanzamento come Eclipse in modo che il progresso aumenti mentre il file viene caricato e lo splash sparisce dopo il caricamento del file. Quindi il mio frame principale viene caricato.Crea schermata iniziale con barra di avanzamento come Eclipse
codice 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
}
}
Non ho molta esperienza con swing, quindi si prega di avvisare come fare questo.
UPDATE: ho trovato il seguente esempio, ma hanno poca problema:
quando il contatore raggiunge il numero specificato occorre fermarsi a (300) mantiene il conteggio per sempre senza fermarsi il timer e nascondendo lo splash screen.
voglio associare il contatore al caricamento del file, così mentre il file è caricato il progresso viene caricato fino a quando il file non viene caricato, quindi il progresso si completa e la schermata iniziale scompare.
@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 } } }
Hai estratto [questa domanda] (http://stackoverflow.com/questions/2089359/java-6-splash-screen?rq=1)? Ha dei buoni collegamenti. –