2009-02-16 17 views
6

Mam bardzo specyficzny problem i chciałem się dowiedzieć, czy istnieje sposób na zmianę właściciela JDialog (można go ustawić za pomocą konstruktora). Przypuszczam, że nie ma "oficjalnej" możliwości (poza hackowaniem), ale chciałem się upewnić, że czegoś nie przeoczyłem. Wszelkie pomysły i podpowiedzi na ten temat byłyby pomocne, dzięki ...Czy istnieje sposób na zmianę właściciela JDialog?

+0

Dlaczego, na Boga, chciałbyś to zrobić? – Bombe

Odpowiedz

7

Jeśli pytanie dotyczy sposobu ponownego użycia okien dialogowych podczas cyklu życia aplikacji, lepszym rozwiązaniem jest:

  1. określić wszystkie treści dialogowych jako podklas JPanel
  2. i wystąpienie nowego JDialog z istniejącym JPanel instancji podklasy

do punktu 2, można oczywiście użyć leniwy ocenę paneli (wystąpienia po raz pierwszy używaj tylko, a następnie użyj ponownie).

Będziesz także potrzebował, aby twoje panele zaimplementowały pewien interfejs (własny), który pozwala na ponowną ich inicjalizację w celu ponownego użycia w nowym JDialogu (ponowne zainicjowanie oznacza zwykle wymazanie wszystkich zawartości pól lub ustawienie tych pól z powrotem na ich wartości domyślne).

1

Jedyne, co mogę wymyślić, to niebezpieczny hack (użyj refleksji i zmień właściciela, ale to może zmienić się w innej wersji JVM (nawet z tego samego vensora na tej samej platformie)).

Być może lepszym pytaniem, które możesz zadać, jest "to jest to, co próbuję zrobić ... czy naprawdę muszę zmienić właściciela okna dialogowego, czy jest lepszy sposób"? Próbuję wymyślić powody, dla których chcę zmienić właściciela i nie mogę wymyślić żadnego ...

1

j:

miałem podobną potrzebę jednym oknie „globalnej” w mojej aplikacji do odbycia okno „Notes”, gdy tekst w komórce tabeli jest zbyt długi, aby wyświetlić. W takim przypadku użytkownik może najechać myszką lub kliknąć prawym przyciskiem myszy na komórkę i otworzyć okno dialogowe wyświetlające cały tekst. Chciałem jednak, aby okno dialogowe było wyświetlane szybko, zwłaszcza po najechaniu myszą, więc chciałem po prostu je pokazać i ukryć. Zdecydowałem się utworzyć i zapisać to okno dialogowe w głównej klasie z ramką aplikacji jako właścicielem. Wtedy, gdy jakikolwiek widok, którego właścicielem była ramka, wymagał okna dialogowego z notatkami, widok mógł uzyskać go z głównej klasy. W tych przypadkach, w których okno dialogowe wymagało okna dialogowego z notatkami, okno nadrzędne mogło utworzyć nowe wystąpienie okna dialogowego notatek z odpowiednim właścicielem. Ponieważ te nadrzędne okna dialogowe (przynajmniej w mojej aplikacji) są usuwane po zamknięciu, okno dialogowe dodatkowych notatek będzie poza zakresem i będzie zbierane śmieci. Nadzieja, która pomaga.

Powiązane problemy