> 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

Répondre à