|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Roma
Messaggi: 795
|
[JAVA] Problemi di refresh di una tabella
DUnque. io ho un codice che deve, dopo alcuni calcoli, scambiare i valori tra due celle della tabella per un numero indefinito di volte.
nel codice che ho scritto succede che la tabella venga aggiornata solo alla fine di tutti gli scambi mentre a me serve che venga aggiornata in tempo reale quando 2 celle vengono scambiate. vi metto uno spezzone di pseudocodice: la actionPerformed sente quando un certo bottone viene premuto e fa partire l'algoritmo di scambio. il problema è che la tabella si aggionra solo quando il programma esce da actionPerformed e non all'interno del cilo while quando chiedo il repaint. suggerimenti? ecco il codice public void actionPerformed(ActionEvent e) { if (premuto == startButton){ //PARTE UN ALGORITMO CHE CALCOLA QUALE DELLE DUE CELLE DELLA TABELLA BISOGNA SCAMBIARE... dopo alcuni calcoli c'è questo ciclo while while (uscita==false){ //ISTRUZIONI VARIE //TRAMITE DEI TABLE.SETVALUEAT SI SCAMBIANO LE DUE CELLE, SUPPONIAMO LA 1 E LA 23 //IL REPAINT SERVIREBBE PER AGGIORNARE LA TABELLA PRIMA CHE RIPARTA IL WHILE table.repaint(); //CONDIZIONI DI USCITA } } } mi serve che alla fine di ogni ciclo del while la tabella aggiorni i valori.... grazie in anticipo!
__________________
PC: Pentium dual core E5200 su ASUS P5K SEe/EPU, 2GB ram, Nvidia GeForce 9600 GSO, Hdd Western Digital 500Gb, ..... |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 418
|
Se non erro, il problema è che l'evento viene gestito dallo stesso Thread di Swing che si occupa di fare il repaint. Quindi anche se tu chiedi di fare il repaint, Swing non può ridisegnare l'oggetto perché...è già impegnato a gestire il tuo evento
Dovresti fare in modo che la tua elaborazione con il while avvenga in un Thread diverso, in modo che il thread Swing sia libero di fare repaint ogni volta che glielo chiedi. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Roma
Messaggi: 795
|
ho capito, ti ringrazio molto... ora provo e poi vi fo sapere
__________________
PC: Pentium dual core E5200 su ASUS P5K SEe/EPU, 2GB ram, Nvidia GeForce 9600 GSO, Hdd Western Digital 500Gb, ..... |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Roma
Messaggi: 795
|
ho creato una classe che estende thread
a questo punto ho public void actionPerformed(ActionEvent e) { if (premuto == startButton){ viene creato un oggetto della classe che ho creato e che estende thread e il cui costruttore prende come parametro la tabella. in essa ho ridefinito il metodo run e lì dentro ho messo il mio ciclo. il thread è startato tramite il metodo run() } } il problema rimane lo stesso. mi refresha tutto alla fine. a quanto ne so i thread vanno in parallelo. una volta che ho fatto la run del thread in teoria il main dovrebbe uscire da actionperformed perchè non ci sono altre operazioni da fare... ma il problema permane, il refresh avviene alla fine... sbaglio qualcosa? grazie ancora per l'aiuto
__________________
PC: Pentium dual core E5200 su ASUS P5K SEe/EPU, 2GB ram, Nvidia GeForce 9600 GSO, Hdd Western Digital 500Gb, ..... |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 418
|
Quote:
|
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Roma
Messaggi: 795
|
ora tutto funge
G R A Z I E ! ! ! ! !
__________________
PC: Pentium dual core E5200 su ASUS P5K SEe/EPU, 2GB ram, Nvidia GeForce 9600 GSO, Hdd Western Digital 500Gb, ..... |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:13.



















