PDA

View Full Version : [JAVA] Problemi di refresh di una tabella


Predator Hunter
20-08-2005, 15:26
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!

BlueDragon
20-08-2005, 19:44
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.

Predator Hunter
21-08-2005, 08:04
ho capito, ti ringrazio molto... ora provo e poi vi fo sapere :)

Predator Hunter
21-08-2005, 09:47
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

BlueDragon
21-08-2005, 10:34
il thread è startato tramite il metodo run()

Fallo partire con start(). Sarà start() ad invocare automaticamente il tuo run. Se usi run() direttamente, è come se chiamassi il metodo di una classe normale e non c'è elaborazione in parallelo :)

Predator Hunter
21-08-2005, 11:35
ora tutto funge

G R A Z I E ! ! ! ! !

:)