|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Apr 2005
Città: Viterbo
Messaggi: 282
|
JAVA... JProgressBar Problema
Ho un problema con l'aggiornamento del componente JProgressBar, ecco il codice:
... int con = 0; int cont = 1; progressBar.setValue(con); while(con <= 10){ cont = 0; while(cont <= 500000000){ cont++; } progressBar.setValue(con); con++; System.out.println("Numero: "+con); System.out.println("Bar: "+progressBar.getValue()); } System.out.println("Fine"); ... Non funziona come dovrebbe l'aggiornamento della barra JProgressBar, ora vi spiego meglio: La barra è stata suddivisa in 10 parti ed in base al parametro che gli viene passato con la varibile "con" si dovrebbe colorare, ma non è così: con = 0 La barra non è colorata, quindi OK con = 1 La barra dovrebbe avere la prima parte colorata ma niente con = 2 La barra dovrebbe avere la prima parte ancora più colorata ma niente con = ... Con = 10 La Barra è tutta colorata quindi OK Ho messo: System.out.println("Numero: "+con); System.out.println("Bar: "+progressBar.getValue()); Per vedere il valore di "Bar: "+progressBar.getValue() ed è Ok, ma la barra durante l'esecuzione sembra bloccata, si aggiorna solo alla fine. Come posso far aggiornare la barra in maniera corretta, cioè ad ogni aggiornamento del parametro "con"? ![]() ![]() ![]() GRAZIE AMICI
__________________
GUNS N'ROSES and VELVET REVOLVER FORUM!! ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Feb 2002
Città: Modena
Messaggi: 592
|
Premetto che non ho mai utilizzato questo componente ma puoi dire come l'hai inizializzato ?
Perchè leggendo la documentazione dovrsti impostare il valore min e max della barra all'atto della creazione! Cmq qui: http://java.sun.com/docs/books/tutor.../progress.html c'è il tutorial della Sun sulle progress bar! Ciauz |
![]() |
![]() |
![]() |
#3 | |
Member
Iscritto dal: Apr 2005
Città: Viterbo
Messaggi: 282
|
Quote:
Alllora il componente è correttamente visualizzato nella gui, il problema è il suo aggiornamento. Cmq: Prima è stato dichiarato nella classe che estende il JFrame così: private JPanel benchPanel; private JLabel vediamoLabel; private JProgressBar progressBar; private JButton startButton; private JButton exitBenchButton; Poi è stato costruito: benchPanel = new JPanel(); vediamoLabel = new JLabel("Avvia"); progressBar = new JProgressBar(0,10); startButton = new JButton("START", new ImageIcon(cl.getResource("images/gen.gif")));; exitBenchButton = new JButton("EXIT", new ImageIcon(cl.getResource("images/chiudi.gif"))); benchPanel.add(vediamoLabel); benchPanel.add(progressBar); benchPanel.add(startButton); benchPanel.add(exitBenchButton); benchPanel.setVisible(false); .... contpane.add(benchPanel); E poi il codice che avevo postato all'inizio è messo nel Listener private class startButtonListener implements ActionListener { public void actionPerformed (ActionEvent er) { Tutti gli altri componenti swing funzioname benissimo... è solo questa cavolo di Barra che non funziona come dovrebbe!!! ![]()
__________________
GUNS N'ROSES and VELVET REVOLVER FORUM!! ![]() ![]() ![]() |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Ciao,
il problema sembrerebbe che, se metti quel ciclo for all'interno della actionPerformed, non dai tempo alla JVM di rinfrescare lo stato della tua progress bar. Quando fai un setValue(), la barra NON viene rinfrescata (cioe' ridisegnata), ma viene messo in coda un comando di rinfresco, il quale verra' eseguito quando il controllo passa ancora alla Virtual Machine. Nel tuo caso, il controllo ci passa quando hai finito il ciclo, per cui vedi la barra passare da vuota a completamente piena. High Flying Sottovento
__________________
In God we trust; all others bring data |
![]() |
![]() |
![]() |
#5 | |
Member
Iscritto dal: Apr 2005
Città: Viterbo
Messaggi: 282
|
Quote:
![]() ![]() ![]() ... ma c'è una soluzione a questo? ![]()
__________________
GUNS N'ROSES and VELVET REVOLVER FORUM!! ![]() ![]() ![]() |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
immagino che il tuo programma fosse di prova (hai un ciclo che continua ad incrementarsi all'interno di una actionPerformed...). Cmq non devi fare quelle operazioni in quella sede! Nella actionPerformed devi semplicemente ATTIVARE qualcun altro. Per esempio, potresti lanciare un thread che fa le operazioni che ti interessano, oppure fare una notify() ad un thread gia' in esecuzione. Non e' una cosa difficile, e le modifiche richieste, se ci pensi, non sono eccessive. Ogni volta che sei un una actionPerformed (non solo quella), la GUI non e' responsiva... High Flying Sottovento
__________________
In God we trust; all others bring data |
|
![]() |
![]() |
![]() |
#7 | |
Member
Iscritto dal: Apr 2005
Città: Viterbo
Messaggi: 282
|
Quote:
Giusto... proverò mettendo le cose in thread differenti, poi se la cosa non funziona potrei anche usare un sleep() sui thread così darei alla GUI il tempo per aggiornarsi.
__________________
GUNS N'ROSES and VELVET REVOLVER FORUM!! ![]() ![]() ![]() |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
La sleep, invece, potrebbe non risolverti le cose (resti comunque fermo nella actionPerformed(), per cui la GUI non puo' rinfrescare). High Flying Sottovento
__________________
In God we trust; all others bring data |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:59.