2010-03-11 3 views
2

Je vais utiliser dans mon application Java Swing Desktop. Je lis à propos de MVC Design pattern et selon ce, nous devrions utiliser Model classes de Swing Components pour séparer le datamodel d'un JComponent de sa partie de présentation.Java Swing - Doit-on utiliser JTree avec TreeModel - Modèle de conception MVC

Ma question rapide est la suivante:

  • JTree(TreeModel newModel)

  • JTree(Object[] value)

  • JTree(TreeNode root)

  • JTree(Vector<?> value)

  • JTree(HashTable<?, ?> value)

Sur les options ci-dessus pour créer un JTree,

Q1. Est-il toujours préférable d'aller avec JTree(TreeModel newModel) pour appliquer le modèle MVC?

Répondre

7

Cela dépend de vos besoins. J'ai tendance à penser que les constructeurs de composants Swing prenant en entrée des objets non-modèles sont en fait des raccourcis pour un prototypage rapide. En effet, derrière les capots, le composant Swing créera un modèle à partir de l'objet d'entrée, puisqu'il nécessite un objet modèle pour que tous les événements soient correctement envoyés.

En conséquence, voici mes conseils:

  • Pour un prototype rapide, vous pouvez envisager l'utilisation de ces constructeurs « maquettes comme »
  • Pour une application « monde réel », don ne pensez même pas à eux, puisque plus tôt ou plus tard apparaîtra le besoin d'envoyer un événement spécifique (pour changer le rendu d'un nœud, faire croître l'arbre, ...)
+0

Quelques bons conseils ici. – Adamski

2

Comme dit Riduidel, JTree utilise toujours un TreeModel En interne, les autres constructeurs sont vraiment juste pour plus de commodité.

Il y a aussi la méthode setModel (JTree), qui va définir (et remplacer) le modèle. Dans une application non triviale, vous voudrez probablement construire le cadre et ses composants avant de remplir les données.

Je ne considère aucun des constructeurs comme étant non-MVC. Ce qui est plus important à cet égard, c'est que vous gardez le code responsable des données, de l'interface utilisateur et de la logique aussi distinct et non dépendant que possible. Cela vous permet de mieux tester votre code unitaire, et cela aide à la flexibilité et à la réutilisabilité.

+0

Je trouve votre approche très intéressante ... Créez-vous souvent des widgets sans modèles chargés? (pure question de curiosité) De mon point de vue, je trouve préférable de créer un widget avec son modèle associé (même si je finis par mettre des données dans le modèle après avoir chargé et affiché le widget) au lieu de changer de modèle. peut * introduire quelques fouillis. – Riduidel

+0

Oui, je développe des applications soutenues par la base de données, donc attendre que les données à charger prend trop de temps. Nous construisons le cadre, puis échangeons le modèle (ou peut-être simplement ajoutons des éléments) chaque fois que les données se chargent. Je prétends que c'est la meilleure solution, mais cela fonctionne pour nous. – tom

+0

oups, je ne prétends pas que c'est la meilleure solution – tom

Questions connexes