Progettare una schermata iniziale (java)

Voglio progettare una schermata iniziale che può mostrare il processo di caricamento corrente con una barra di avanzamento, proprio come la schermata di avvio di netbeans, come mostra

loading... modules, done!.... loading modules and so on 

e al termine del caricamento viene visualizzata l’applicazione principale.

Ho letto molti articoli relativi alla sola creazione di uno splash screen, ma nessuno di loro si occupa di come visualizzare lo stato di avanzamento di diverse attività in background su uno splash screen.

Come posso raggiungere questo objective?

Posso usare javafx 2 per splash screen mentre il resto dell’applicazione è scritto usando java

Risolto!

Finalmente sono riuscito a farlo funzionare. Il mio errore era che stavo aggiornando il contenuto della GUI nella Thread attività in modo che Thread My Task era bloccato e non poteva eseguire le istruzioni successive dopo le istruzioni di aggiornamento della GUI.Ora ho spostato quelle istruzioni di aggiornamento GUI dopo il completamento dell’attività, e il suo funzionamento …. . Grazie Jewelsea per la strada giusta.

Ho creato un esempio di splash page per un’applicazione JavaFX 2.0 standalone in precedenza.

Ho aggiornato il campione per dimostrare il monitoraggio dell’avanzamento del carico tramite una barra di avanzamento e il testo di avanzamento nella pagina iniziale.

Per adattare il codice al monitoraggio dell’avanzamento dell’inizializzazione dell’applicazione, anziché bind ProgressBar alla proprietà loadWorker.workDone di un loadWorker.workDone , creare un’attività JavaFX che esegua un costoso lavoro di inizializzazione e monitorare lo stato di avanzamento dell’attività tramite ProgressProperty e messageProperty dell’attività .

Ecco un collegamento a un campione basato sullo splash basato sull’approccio Task descritto nel paragrafo precedente.

Per un’applicazione WebStart o JavaFX integrata nel browser, utilizzare un preloader come suggerito da assylias.

Se si utilizza java-web-start per la distribuzione, l’ elemento icon può fare riferimento a una qualsiasi varietà di immagini. L’indicazione di avanzamento viene gestita dal client jnlp durante il download. Il vantaggio sta intervenendo molto presto nell’esperienza dell’utente.

Successivamente, uno SwingWorker può caricare immagini in background, come mostrato qui . Il metodo progress() del lavoratore può guidare un JProgressBar tramite un PropertyChangeListener , come mostrato qui .

L’utilizzo di un preloader per visualizzare l’avanzamento dell’inizializzazione dell’applicazione sembra essere quello che stai cercando.

Dai un’occhiata al tutorial dello splash screen di Swing , che contiene un esempio in cui una barra di avanzamento viene aggiornata nella schermata iniziale. Potresti facilmente regolare il campione per aggiornare invece del testo.

Crea anche Splash Screen con java,

ma se vuoi programmare meno e fare di più che usare JavaFx Splash Component.

Per completezza, se vuoi mostrare una barra di avanzamento. Citando il javadoc di SplashScreen :

La finestra della schermata iniziale viene chiusa automaticamente non appena viene visualizzata la prima finestra da Swing / AWT.

il che significa che non può usare componenti standard AWT / Swing (come JProgressBar ) ma può essere disegnato solo attraverso i metodi di Graphics2D (ad esempio drawText() , fillRect() , …).

Quindi dovresti emulare una barra di avanzamento in una class separata (il codice è dato come una dimostrazione molto approssimativa. Dovresti controllare SplashScreen.isVisible() ):

 public class SplashProgressBar { SplashScreen splash; Graphics2D g; int x, y, w, h; // Drawing position in splash screen int val, max; // Progress bar value String text; // Text to display public SplashProgressBar(SplashScreen splash, int x, int y, int w, int h) { this.splash = splash; g = splash.createGraphics(); this.x = x; // this.y = y; etc this.val = 0; this.max = 100; } public void setMaximum(int n) { max = n; update(); } public void setValue(int n) { val = n; update(); } public void setString(String text) { this.text = text; update(); } public void update() { g.setColor(Color.WHITE); g.fillRect(x, y, w, h); g.setColor(Color.DARK_GRAY); g.drawRect(x, y, w, h); g.setColor(Color.ORANGE); g.fill3DRect(x, y, w * val / max, h, true); if (text != null) { g.setColor(Color.BLACK); g.drawString(text, x + (w - g.getFontMetrics().stringWidth(text)) / 2.0f, y + 8 - 2); // Use TextLayout to get precise text dimensions... } splash.update(); } } 

Poi:

 // Drawn a scroll bar at (10;100) x (300x15) on the splash screen image (we know its size and where it would fit) SplashProgressBar spb = new SplashProgressBar(SplashScreen.getSplashScreen(), 10, 100, 300, 15); spb.setMaximum(processing.size()); for (int i = 0; i < processing.size(); i++) { spb.setValue(i); spb.setString("Processing #"+(i+1)); // Do the processing... }