2009-02-16 13 views
6

Ich habe ein sehr spezifisches Problem, und ich wollte wissen, ob es eine Möglichkeit gibt, den Besitzer eines JDialogs zu ändern (es kann mit dem Konstruktor festgelegt werden). Ich nehme an, es gibt keine "offizielle" Möglichkeit (außer einem Hack), aber ich wollte sicherstellen, dass ich nichts verpasst habe. Irgendwelche Ideen oder Hinweise zu diesem Thema wären hilfreich, danke schon ...Gibt es eine Möglichkeit, den Besitzer eines JDialogs zu ändern?

+0

Warum in aller Welt möchten Sie das überhaupt tun? – Bombe

Antwort

7

Wenn Ihre Frage ist, wie Dialoge während des Anwendungslebenszyklus wiederverwendet wird, dann ein besserer Weg zu:

  1. definieren alle Dialoginhalte als JPanel Unterklassen
  2. und instanziiert ein neues JDialog mit der bestehenden JPanel Unterklasse Instanz

Für Punkt 2, können Sie natürlich faul Auswertung der Platten verwenden (instanziiert auf den ersten nur verwenden, dann wiederverwenden).

Sie müssen auch Ihre Panels eine eigene Schnittstelle implementieren lassen, die es Ihnen ermöglicht, sie für die Wiederverwendung in einem neuen JDialog zu initialisieren (Reinit bedeutet in der Regel Löschen aller Felder Inhalte oder Festlegen dieser Felder zurück zu ihren Standardwerte).

1

Nur was mir einfällt fällt unter unsicheren Hack (benutze Reflektion und verändere den Besitzer, aber das könnte sich unter verschiedenen Versionen der JVM ändern (sogar von demselben Anbieter auf der gleichen Plattform)).

Vielleicht eine bessere Frage für Sie zu fragen ist "das ist, was ich versuche zu tun ... muss ich wirklich den Besitzer des Dialogs ändern oder gibt es einen besseren Weg"? Ich versuche, von Gründen zu denken, zu wollen, um den Besitzer zu ändern, und ich kann mit jedem nicht kommen ...

1

j:

ich eine ähnliche Notwendigkeit eines einzigen „global“ Dialog in meiner Anwendung gehabt habe einen „Notiz“ Dialog, wenn der Text in einer Tabellenzelle dienen zu lang ist, angezeigt werden soll. In diesem Fall kann der Benutzer den Mauszeiger bewegen oder mit der rechten Maustaste auf die Zelle klicken und ein Dialogfeld aufrufen, das den gesamten Text anzeigt. Ich wollte jedoch, dass der Dialog schnell angezeigt wird, vor allem, wenn ich den Mauszeiger halte, also wollte ich ihn einfach ein- und ausblenden. Ich entschied mich, diesen Dialog in der Hauptklasse mit dem Anwendungsrahmen als Eigentümer zu erstellen und zu speichern. Wenn dann eine Ansicht, deren Besitzer der Rahmen war, den Notizdialog benötigte, konnte die Ansicht ihn von der Hauptklasse abrufen. In den Fällen, in denen ein Dialogfeld das Dialogfeld Notizen benötigt, kann das übergeordnete Dialogfeld eine neue Instanz des Dialogfelds Notizen mit dem entsprechenden Besitzer erstellen. Da diese übergeordnete Dialoge (zumindest in meiner App) beim Schließen angeordnet sind, würde die zusätzliche Notizen-Dialoginstanz den Gültigkeitsbereich verlassen und den Müll sammeln. Ich hoffe, das hilft.

Verwandte Themen