Frage

Wie kann ich vermeiden, dass ein Dialog angezeigt wird, wenn bereits ein auf dem Bildschirm?

Details: In meiner Anwendung viele Timer ausgeführt werden. Wenn ein schwerwiegender Fehler auftritt, werden alle betroffenen Fäden werden eine JDialog zeigen (durch swingx.JXErrorPane.showDialog ()), was nicht erwünscht ist. Selbst wenn ich alle laufenden Timer abzubrechen, noch werden einige Dialoge zur gleichen Zeit erscheinen. Wie kann ich, dass es nur erreichen, ein Dialogfeld angezeigt wird?

Ich habe versucht, das Verfahren zu machen, die Showdialog () synchronisiert Anrufe, die blockiert in meinem ganzen GUI dazu führt. Die Nutzung eines Flag hat nicht funktioniert.

War es hilfreich?

Lösung

Drehen Sie den Dialog in einem Beobachter und veröffentlichen die Fehlerereignisse zu diesem neuen Beobachter (siehe Observer Design Muster ). Wenn ein Ereignis eintritt, sollte der Dialog zeigt sich (mit dem Hauptrahmen als Mutter). Zeigen Sie die letzten Fehler in einer Tabelle im Dialog. Hinzufügen neuer Fehler auf den Grund dieser Tabelle.

Eine andere Möglichkeit ist es, die Fehler in einer Tabelle im Hauptrahmen angezeigt werden soll. Setzen Sie den Tisch in eine JSplitPane, so dass Benutzer sie minimieren kann.

Andere Tipps

Eine weitere Option wäre, den Dialog in ein Singleton drehen:

  • Geben Sie den Dialog einen privaten Konstruktor.
  • Erstellen Sie eine "private static MyDialog Instanz;" -. Attribut in der Dialogklasse
  • Erstellen Sie eine „public static MyDialog getInstance () {...}; -. Methode, um die Instanz zurückzugeben und es zuerst instanziiert, wenn es null ist

Wo MyDialog sollte der Name des Dialogfensters Klasse sein.

Dann wird jedes Mal, wenn Sie brauchen den Dialog zeigen Sie einfach auf die Singleton verweisen:

MyDialog.getInstance () showdialog ();.

Wo Showdialog macht nur das Dialogfenster sichtbar.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top