> From: Remi Forax [mailto:[EMAIL PROTECTED]]
> Les composants graphiques sont tous des beans, pour faciliter > leurs int�grations dans des IDEs. Donc cloner un bean reviens > �, cr�er une nouvelle instance par le constructeur par > d�faut, recup�rer chaque valeur du composant � cloner et les > injecter dans le composant nouvellement cr�er. Je ne comprends pas pourquoi tellement de personnes essaient d'utiliser clone(). C'est une methode paresseuse et en general dangereuse, surtout si tu ne sais pas exactement quelle est la semantique des "sous-clones". Il suffit d'un petit bug, comme retourner une reference au lieu d'une copie, et c'est la porte ouverte a des bugs subtils et tres difficiles a trouver. Mieux vaut ecrire tes propres composants et les cloner en utilisant les principes simples du MVC. Typiquement, un panneau a un modele, qui represente son etat. Cloner un panneau existant devrait etre aussi simple que: MyPanel p2 = new MyPanel(); p2.setModel(p1.getModel()); Je peux detailler, mais en regle general, l'initialisation de mes panneaux se fait en deux parties : initUIWithoutModel(); if (null != m_model) initUIWithModel(); La premiere methode etablit l'interface graphique sans modele : contraintes du layout manager, ajout des widgets, etc... La deuxieme methode n'est appelee que si ce panneau possede un modele et elle se charge de remplir les widgets avec les bonnes valeurs. Pourquoi cette distinction ? Il y a plusieurs raisons : - Il est facile de tester les composants unitairement, via leur main(). Ca permet de prototyper leur apparence rapidement. - Il est facile de reutiliser un meme composant avec differents modeles. Je peux detailler sur cette methode, mais c'est les grandes lignes. -- Cedric
