Как сделать Swing / JFace / SWT GUI адресуемым? - PullRequest
5 голосов
/ 19 ноября 2008

У меня есть «толстый» графический интерфейс, который становится довольно сложным, и я хотел бы добавить ссылки с одного места на другое, а также кнопки «назад» / «вперед» для облегчения навигации. Мне кажется, что было бы проще, если бы мое приложение было адресуемым: у каждого композита мог быть свой URI, и ссылки использовали бы этот URI.

Существуют ли шаблоны проектирования, применимые к этой проблеме?

Я мог бы просто взглянуть на исходный код Firefox или Eclipse, но это огромные проекты, и на их прохождение ушло бы много времени, поэтому я спрашиваю здесь. Где-нибудь есть более простой пример?

Конечно, было бы проще, если бы я сначала создал веб-приложение, но я не собираюсь переписывать это огромное приложение с нуля в ближайшее время.

Ответы [ 4 ]

1 голос
/ 22 ноября 2008

Мой последний подход включал глобальный менеджер и регистрацию ссылок. Каждая часть пользовательского интерфейса смогла однозначно назвать себя и зарегистрироваться. Глобальный менеджер знает о каждом из них, а затем использует грязную работу, чтобы сделать эту часть видимой. Навигация назад / вперед была сделана специальным менеджером отмены / возврата. Каждый «дисплей» мог получить диспетчер навигации и зарегистрировать свое событие «отменить». Сделать это было тяжело, но получившаяся функция оказалась весьма полезной. Мы обсудили использование простого сервиса JNDI для определения местоположения и именования частей пользовательского интерфейса. Это может быть полезно и для ссылок.

1 голос
/ 19 ноября 2008

Вы можете создать «глобальный» реестр, который отображает уникальные идентификаторы на объекты (или, возможно, имена классов). Эти объекты могут быть, например, JPanels. Когда пользователь нажимает на ссылку или кнопку, некоторый Контроллер получает уведомление с ключом новой страницы для отображения. Этот контроллер может создать этот JPanel и поместить его в фрейм приложения.

1 голос
/ 19 ноября 2008

Мое решение для таких вещей обычно включает шаблон слушателя . Короче говоря, вы уменьшаете связность, предоставляя способ отправлять и получать события от заинтересованных сторон (в данном случае композиты). Это довольно легко реализовать даже при модернизации. Таким образом, ваши события и вечеринки могут меняться без изменения зависимого кода.

0 голосов
/ 19 ноября 2008

В Swing вы можете использовать CardLayout . Каждая «страница» может быть карточкой, а название карточки (выбираемое при добавлении карточек в макет) будет эквивалентно нужному URI.

Пример:

String PAGE_1_KEY = "page 1";
String PAGE_2_KEY = "page 2";
// as many keys as you need

JFrame frame = ...;
frame.setLayout(new CardLayout());
frame.add(createPage1(), PAGE_1_KEY);
frame.add(createPage2(), PAGE_2_KEY);
// etc.

Тогда в слушателях действий ваших кнопок вы бы позвонили

((CardLayout)frame.getLayout()).show(frame, PAGE_1_KEY); // or whichever
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...