Есть ли способ сменить владельца JDialog? - PullRequest
6 голосов
/ 16 февраля 2009

У меня очень специфическая проблема, и я хотел узнать, есть ли способ изменить владельца JDialog (это можно установить с помощью конструктора). Я предполагаю, что нет никакой "официальной" возможности (кроме взлома), но я хотел удостовериться, что я ничего не пропустил. Любые идеи или советы по теме будут полезны, спасибо уже ...

Ответы [ 3 ]

7 голосов
/ 17 февраля 2009

Если ваш вопрос о том, как повторно использовать диалоговые окна в течение жизненного цикла приложения, то лучший способ это сделать:

  1. определить все содержимое вашего диалога как подклассы JPanel
  2. и создание нового JDialog с существующим экземпляром подкласса JPanel

Для пункта 2 вы, конечно, можете использовать ленивую оценку панелей (создавать экземпляры только при первом использовании, а затем повторно).

Вам также понадобится, чтобы на ваших панелях был реализован некоторый интерфейс (ваш собственный), который позволяет вам повторно инициализировать их для повторного использования в новом JDialog (повторный ввод, как правило, означает удаление содержимого всех полей или восстановление этих полей по умолчанию. значения).

1 голос
/ 10 августа 2012

J

У меня была аналогичная потребность в одном «глобальном» диалоге в моем приложении для обслуживания диалога «заметок», когда текст в ячейке таблицы слишком длинный для отображения. В этом случае пользователь может навести курсор мыши или щелкнуть правой кнопкой мыши по ячейке и получить диалоговое окно, в котором отображается весь текст. Однако я хотел, чтобы диалог отображался быстро, особенно при наведении, поэтому я хотел просто показать и скрыть его. Я решил создать и сохранить этот диалог в главном классе с фреймом приложения в качестве владельца. Затем всякий раз, когда любому представлению, владельцем которого был фрейм, требовался диалог примечаний, представление могло получить его из основного класса. В тех случаях, когда для диалога требовался диалог заметок, родительский диалог мог создать новый экземпляр диалога заметок с соответствующим владельцем. Поскольку эти родительские диалоговые окна (по крайней мере, в моем приложении) располагаются при закрытии, экземпляр диалогового окна дополнительных заметок выходит за пределы области видимости и собирает мусор. Надеюсь, это поможет.

1 голос
/ 16 февраля 2009

Единственное, о чем я могу думать, подпадает под небезопасный взлом (используйте отражение и измените владельца, но это может измениться при другой версии JVM (даже с одного и того же вентилятора на той же платформе)).

Возможно, вам лучше задать вопрос: «Это то, что я пытаюсь сделать ... мне действительно нужно сменить владельца диалога или есть лучший способ»? Я пытаюсь придумать причины, по которым хочу сменить владельца, и не могу придумать ни одного ...

...