Le binding est là pour toi.
Un framework permettant de faire du binding modèle/composant en Swing de façon propre:
http://www.jgoodies.com/downloads/libraries.html
Deux articles du créateur du framework expliquant la base du concept de bindings:
http://www.jgoodies.com/articles/pat...nd-binding.pdf
http://www.jgoodies.com/articles/binding.pdf
Une suite de quatre tutos basé sur cette librairie (bien lire jusqu'au quatrième article):
http://www.javalobby.org/java/forums/t17672
http://www.javalobby.org/java/forums/t17707
http://www.javalobby.org/java/forums/t17728
http://www.javalobby.org/java/forums/t17788.html
En ce qui concerne la gestion des Threads la question est plus générale.
L'appli Swing est automatiquement lancée dans son propre Thread,appelé EDT (d'ailleurs il est de bon aloi d'instancier la classe créant la JFrame initiale via un
SwingUtilities.invokeLater(Runnable r)
et ne surtout pas inclure la création du GUI dans le scope d'un )
La récupération des données (action longue) doit se faire dans un Thread à part, toutefois l'affectation de ces données au modèle doit se faire dans l'EDT. Pour demander l'exécution de code dans l'EDT il faut passer par la méthode
SwingUtilities.invokeLater(Runnable r)
, sachant que toute modification d'un composant et de son modèle doit être réalisée dans l'EDT.
Pour faciliter ce genre de chose il existe une classe utilitaire des plus pratique, à savoir le SwingWorker, voici un tutoriel sur son utilisation: http://rom.developpez.com/java-swingworker/
Ensuite au niveau organisation, voici comment procéder:
Avoir un contrôleur/Presenter globale qui va créer les composants, le modèle et gérer les bindings. Ce contrôleur va aussi s'occuper de la récupération des données en lançant un SwingWorker. SwingWorker auquel on aura fourni une référence sur le contrôleur. Ce SwingWorker va s'occuper de récupérer les données dans le doInBackground (qui est exécutée dans un thread à part), puis appeler une méthode du contrôleur pour lui passer les données dans la méthode done (qui est exécutée dans l'EDT). A toi de voir si tu préfères binder un nouveau modèle ou juste modifier le modèle déjà bindé.
Partager