53 votes

Comment organiser une application d'interface graphique Swing?

J'ai écrit un peu de GUI à l'aide de Swing et je sais à propos de MVC, mais je n'ai jamais trouvé un bon moyen de vraiment organiser mon code en quelque sorte. Ce que je cherche, c'est quelque chose comme la structure de dossier que maven introduit pour chaque nouveau projet. Un autre exemple est des rails, où MVC est introduit dans la structure de dossiers automatiquement. Est-il quelque chose de similaire pour le Swing?

Il serait également agréable de voir un livre qui décrit le développement d'une plus grande Application Swing. Tout ce que je trouve sont des livres à propos de la conception des lignes directrices où la conception se réfère à l'apparence de l'application. D'autres Swing livres (comme O'Reilly) décrire en détail tous les composants swing, mais où sont toutes les informations au sujet de la grande image?

Existe-il des bons exemples d'une balançoire gui, où vous dirais "C'est comment vous organiser le code/dossiers/packages pour le swing!"?

EDIT: j'ai trouvé le site suivant http://www.ibm.com/developerworks/java/tutorials/j-springswing/section7.html qui décrit l'utilisation de printemps, tandis que la création d'une interface graphique. C'est un très vieil exemple et il n'a pas répondu à ma question, mais c'est un pas dans la bonne direction. Il mentionne également le Printemps RCP, mais je ne suis pas sûr si elle pourrait être la solution.

EDIT2: je ne l'ai toujours pas trouver toutes les meilleures réponses. Quelqu'un sait un exemple pour un idéalement structuré Swing GUI qui est Open Source? Quelqu'un sait d'un livre, qui décrit-il? Et si ce n'est pour le Swing, alors peut-être que pour l'interface graphique en général?

12voto

jfpoilpret Points 6523

Bien qu'il est Groovy, pas de Java, je vous conseille de prendre un coup d'oeil à Griffon, qui est un "Graal pour le Swing".

Il applique une structure donnée (en termes de répertoires et de patterns, MVC en particulier) pour toutes les applications que vous créez avec elle.

Je pense qu'il peut vous donner de bonnes idées en général, bien que vous auriez à effectuer un peu de l'adaptation à la Java.

En outre, veuillez noter que le Griffon prend également en charge la construction d'Applications en Java, et il peut également fournir des "archétypes" pour que, ainsi, vous pouvez vérifier que ainsi.

9voto

Jonas Points 22309

Vous pouvez lire Un Swing Présentation de l'Architecture. Mais quand je fais le plus grand des applications Swing je n'organise pas de la même façon, comme je le fais lorsque vous faites développement web. Je me contente d'organiser mes applications Swing dans les parties fonctionnelles. E. g. si l'application a quatre onglets avec des formes et des tables, j'ai mis les composants à partir d'un onglet dans un seul paquet. Puis j'ai finit généralement avec quelques-uns des implémentations personnalisées de AbstractTableModel que les formulaires et tables d'interagir avec. Et le Modèle maintient un cache des données et communique avec la base de données.

Dans ma dernière application Swing, j'ai utilisé Akka acteurs afin de simplifier l'enfilage. Ensuite, j'ai eu tous mes composants Swing exécuté sur l'EDT-fil et ils ont communiqué avec un Objet d'Accès aux Données qui était une coutume de l'Acteur. Puis, j'ai aussi eu quelques TimerTask que les données synchronisées à partir de la base de données avec des services sur Internet, mais ils n'ont jamais été exécuté sur l'EDT, ils ne communique avec le DAO, (mon Acteur).

6voto

Costis Aivalis Points 8935

Développement Web vous oblige à certaines sources et ressources mises en page. Ce n'est pas le cas avec des applications Swing. Ici, vous pouvez utiliser la mise en page qui convient à vos objectifs le meilleur.

Vous serez beaucoup plus productif si vous utilisez un IDE. NetBeans est le choix parfait pour le Swing. NB vous donne un peu de restrictions sur la façon de stocker vos classes. Il y a une "Source de Paquets" dans le dossier qui contient les Packages Java et un "Test de Paquets" pour le correspondant de test JUnit classes si vous utilisez JUnit, dont je vous conseille fortement de le faire.

Dans le cas où vous utilisez le mode veille prolongée, vous devez vous en tenir à ses conventions, de construire une autre.entité et que ce soit.util et la configuration des fichiers XML doivent être dans le "package par défaut'.

Toute autre organisation de ces paquets est programmeur. - Je faire un package avec la JFrame qui court tout le spectacle. Et un paquet pour chaque unité logique. Parfois, j'utilise un package pour le AbstractTableModels et de les garder ensemble, et un autre pour ComboBoxModels. Il n'est pas nécessaire de rendre les structures plus profondes. Vous pouvez avoir un paquet séparé pour les icônes que vous pouvez utiliser pour vos boutons, l'un pour les sons, etc. Netbeans crée l'exécutable fichier jar pour votre application où tous les fichiers nécessaires, y compris le besoin de la bibliothèque pots sont inclus.

Vous avez ici un petit exemple. Tous les noms des paquets à l'exception de 'th' sont tout à fait évidents. 'th' est le nom de cette application et j'ai la JFrame qui héberge l'application là. Cette application utilise iReport pour générer des rapports. C'est ce que le 'iReports trousse pour.

enter image description here

Livres décrivent des échantillons plus petits et sont plus concernés par les conventions Java.

Vous pouvez essayer de Apache Maven et voir l'architecture qu'ils fournissent à l'application des archétypes.

0voto

JVerstry Points 12414

Malheureusement (ou heureusement, ça dépend de la façon dont vous prenez un coup d'oeil), il n'est pas facile de développer des génériques volets utilisable pour plusieurs structures de données. M est souvent étroitement lié à V, et V contient souvent certains C.

J'ai tendance à mettre le V volet et de la M de la structure dans le même package. Vous aussi besoin d'un peu de contrôle central displayer pour afficher chacun des panneaux individuels. La C est partagé entre le central de contrôle de displayer et les volets eux-mêmes.

Maintenant, si vous avez besoin de plus de structure dans votre projet, vous pourrait s'emparer de l' Struts 2 cadre de déplacer tout le C dans certaines actions et ont des volets (V) indiquer ce qui devrait être le prochain M/V pour afficher. Struts est à l'origine développé pour les applications web, mais Struts 2 est désormais détachée de la HttpServlet.

Je n'ai pas essayé moi-même, mais je vois quelques avantages. Vous pourriez JUnit test de l'écran de séquences sans réellement les écrans d'affichage. Il suffit de créer volets instances volet et invoquer l'écoute les méthodes par des événements (clic de souris, etc...).

Juste une idée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X