Повторное использование компонентов Swing, которые требуют много времени для инициализации - PullRequest
2 голосов
/ 06 мая 2011

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

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

Предположим, что может потребоваться динамическое отображение копий этого компонента, в зависимости отввод пользователя GUI (то есть мы не хотим предварительно загружать много копий одного и того же компонента).

Ответы [ 4 ]

5 голосов
/ 06 мая 2011

Вам необходимо изменить компоненты, чтобы получить доступ к данным в модельном виде, как в моде.Каждый компонент должен указывать на одну и ту же модель, которая обслуживает данные на сервере и выполняет интенсивную задачу один раз, а не несколько раз.

Кроме того, инициализация замедляет GUI, а затем звучит так, как будто вам нужен экран-заставкаили индикатор выполнения, и задача вышла из EDT.

2 голосов
/ 07 мая 2011

Я бы создал один экземпляр компонента (скажем, HeavyComponent) и пользовательский класс, расширяющий, например, JPanel и ссылающийся на компонент.Давайте назовем это MyContainer.На paintComponent () MyContainer я бы нарисовал оригинальный компонент в BufferedImage или использовал heavyComponentReference.paint (g).Затем, щелкнув MyContainer, я заменил компонент, заменив панель реальным экземпляром HeavyComponent и поместив в старое местоположение нового экземпляра HeavyComponent MyContainer.

2 голосов
/ 06 мая 2011

Есть ли какой-нибудь способ, которым вы могли бы вытащить сверхпрочный код инициализации, возможно, в класс "... Factory"?

0 голосов
/ 07 мая 2011

отображать этот компонент в разных местах моего GUI одновременно ... без необходимости создавать новую копию того же компонента ... пользователь должен иметь возможность взаимодействовать с различными копиями

Ни за что.

...