Question

Comment puis-je éviter qu'une boîte de dialogue ne s'affiche lorsqu'elle existe déjà à l'écran?

Détails: Dans mon application, de nombreux minuteurs sont en cours d'exécution. Si une erreur fatale se produit, tous les threads affectés afficheront un JDialog (par swingx.JXErrorPane.showDialog ()), ce qui n'est pas souhaité. Même si j'annule toutes les minuteries en cours d'exécution, certains dialogues apparaîtront en même temps. Comment puis-je obtenir qu'un seul dialogue apparaisse?

J'ai essayé de synchroniser la méthode qui appelle les appels showDialog (), ce qui a pour effet de bloquer toute l'interface graphique. L’utilisation d’un drapeau ne fonctionnait pas non plus.

Était-ce utile?

La solution

Transformez le dialogue en observateur et publiez les événements d'erreur sur ce nouvel observateur (voir le modèle de conception d'Observer ). Lorsqu'un événement se produit, la boîte de dialogue devrait s'afficher (avec le cadre principal comme parent). Affiche les erreurs récentes dans un tableau de la boîte de dialogue. Ajoutez de nouvelles erreurs au bas de cette table.

Une autre option consiste à afficher les erreurs dans un tableau du cadre principal. Placez la table dans un JSplitPane afin que les utilisateurs puissent la minimiser.

Autres conseils

Encore une autre option serait de transformer la boîte de dialogue en singleton:

  • Attribuez à la boîte de dialogue un constructeur privé.
  • Créer une "instance MyDialog statique privée;" - attribut dans la classe de dialogue.
  • Créer un MyDialog statique public statique getInstance () {...}; - méthode pour renvoyer l'instance et la première instancier si elle est nulle.

Où MyDialog devrait être le nom de la classe de la fenêtre de dialogue.

Ensuite, chaque fois que vous devez afficher la boîte de dialogue, vous vous référez simplement au singleton:

MyDialog.getInstance (). showDialog ();

Où showDialog rend simplement la fenêtre de dialogue visible.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top