Bonjour,
Je travaille sur un modèle de simulation numérique, avec des calculs d'un côté et un affichage à l'écran de la simulation de l'autre. J'utilise pour cela un SwingWorker().
J'ai deux objets :
* Simulation() qui execute les calculs
* SimulationUI() qui dérive d'un JPanel sur lequel je dessine les étapes de la simulation, en redéfinissant paintComponent()
Le problème : ça marche sans aucun problème mais le code appelle deux fois la méthode simulationUI.paintComponent() ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 class MonSwingWorker extends SwingWorker { @Override public Object doInBackground() throws Exception { while(time < simulationDuration) { simulation.step(time); //je lance une étape publish(time); } } @Override protected void process(List<Long>times) { for (long time:times) if (time % dt_refresh == 0) { slider.setValue(step++); // je fais avancer un slider simulationUI.repaint(); //je rafraichis l'affichage } } }
Le premier est sûrement dû à l'utilisation de la méthode publish() (qui ajoute une nouvelle tache dans l'EDT, je le dis mal mais c'est l'idée, non ?) et l'autre qui correspond à mon repaint()
J'ai refais tourner en supprimant la ligne simulationUI.repaint().La méthode paintComponent() est appelée une fois, mais je n'observe plus de rafraichissment à l'écran ...
Bref je comprends pas bien ce qui se passe
J'ai dis que le code marchait bien et que je pourrais m'en tenir là. Mais un double appel à la méthode paintComponent() est très gênant parce que je fais beaucoup de calculs dedans et ça ralentit l'application.
D'avance merci pour vos éclaircissments.
Philippe.







Répondre avec citation
Partager