Modèle de conception pour la gestion des fenêtres dans une application Java Swing


9

Je viens de commencer à créer ma toute première petite application Java Swing. Lorsque le programme s'ouvre, il affiche une seule fenêtre simple avec une étiquette et quelques boutons. Cliquer sur l'un de ces boutons est censé effacer l'écran d'accueil et le remplacer par un panneau totalement différent.

Je ne sais pas quelle est la meilleure façon de créer cette fonctionnalité. Une méthode serait de passer mon JFrameargument en ... à peu près tous les autres composants, mais cela me semble bizarre. Ou, il y a faire doubler chaque panneau comme écouteur d'action, mais cela ne semble pas non plus correct.

Y a-t-il un modèle de conception que je devrais appliquer ici? "Remplacer le contenu de la fenêtre principale et unique" doit être une opération assez courante. Un nom pour le motif suffirait; À partir de là, je peux utiliser Google par moi-même. (Je ne dirais pas non à une explication plus longue, cependant.)


Ceci étant une question sur les techniques de programmation réelles, vous obtiendrez probablement beaucoup plus de réponses sur Stack Overflow.
Alex Feinman,

Réponses:


6

Lors de la création d'applications Swing, je le base généralement sur le modèle de médiateur. Dans ce modèle, une classe Mediator (généralement le JFrame principal) gère les différentes parties de l'interface graphique (généralement les JPanels, JMenus ...) et s'occupe de la communication entre elles.

Par exemple, si un événement s'est produit dans JPanel1, JPanel1 notifie le médiateur (le JFrame). le JFrame prend alors des mesures en modifiant JPanel2.

FYI: tous mes projets étaient des applications GUI petites à moyennes, donc je ne suis pas sûr que ce modèle évolue bien. Mais si vous pouviez concevoir une architecture adéquate, le motif Mediator peut être une base solide.


4

Vous pouvez demander à la méthode principale d'afficher un JDialog. Lorsque la boîte de dialogue est fermée, le JFrame principal est créé et affiché.

JDialog vous offre des méthodes statiques faciles à utiliser qui affichent une boîte de dialogue avec un contenu et des boutons personnalisés et renvoient le code du bouton sur lequel vous avez cliqué. En testant cette valeur, votre méthode principale peut décider d'afficher le cadre principal ou de quitter (ou toute autre chose). Veuillez lire le Javadoc.

Contrairement à certains cadres d'interface utilisateur plus anciens, une application Swing n'est pas liée à un cadre ou une fenêtre spécifique. Vous pouvez créer autant de fenêtres que vous le souhaitez. L'application se termine lorsque tous les threads se terminent, pas lorsque toutes les fenêtres ont été supprimées. Ceci est généralement réalisé avec System.exit (0).

Je ne sais pas s'il existe un modèle de conception spécifique pour ce cas. Je recommande le tutoriel Java Swing.


1
-1. Ceci est une question de modèle de conception. Recommander de modifier les spécifications qui m'ont été données et de terminer par "Je ne sais pas s'il existe un modèle de conception spécifique" n'y répond pas.
Pops du

2
Sa réponse est très précise. Vous n'avez pas de problème de modèle de conception, vous devez d'abord apprendre comment fonctionnent les formulaires et les boîtes de dialogue.
Alex

2

De nombreux cadres d'interface utilisateur ont des règles différentes concernant la fenêtre «principale» ou «active». Une façon de gérer cette complexité consiste à faire en sorte que votre fenêtre principale, qui contrôle la boucle de message principale, soit invisible (ou petite, 1 pixel sans chrome, hors écran pour les cadres particulièrement ennuyeux). puis toutes les autres fenêtres et boîtes de dialogue doivent être un enfant de cette fenêtre.

Cette méthode présente de nombreux avantages, en particulier lors de la gestion des clics et des événements de souris globaux, ainsi que dans la journalisation de niveau supérieur et la gestion des exceptions.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.