| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: GUI и Java FX приложения > Слушатели в профессиональных SWING-приложениях |
| Автор: mstalker26 23.8.2010, 21:55 |
Собственно возник вопрос: как организовывают технику написания слушателей (listeners) в профессиональных (и что более важно в больших) swing-приложениях. Хотелось бы чтобы оставляли комментарии те, кто действительно работал с этим на практике. Я только в теории
Анонимные классы с диспечеризацией мне как-то сразу не приглянулись. Хотя черт его знает, как на самом деле... Было бы здорово, если расскажете о плюсах и минусах той или иной техники (вполне вероятно, что я чего-то по незнанию упустил). |
| Автор: Skipy 24.8.2010, 10:22 |
| Первые два варианта использую. Они простые в понимании и реализации. Третий - даже не представляю, что это. Четвертый - будут проблемы с расширяемостью и поддержкой приложения. Я посмотрю на Ваш метод диспетчеризации, когда у Вас будет хотя бы полсотни источников и слушателей. |
| Автор: x8m6 24.8.2010, 15:58 |
| Если на форме большое кол-во виджетов, то лучше выносить всех слушателей в отдельный класс и называть его FormController. В нем можно и логику сразу зашить. Так логика будет отделена от вида. В больших Swing приложениях здорово помогает. |
| Автор: COVD 24.8.2010, 17:14 |
| А что понимается под "диспетчеризация"? События от контролов всегда доставляются зарегистрированным лисенерам (хендлерам) через event dispatching thread (EDT). В приложении может быть возможность открывать одновременно несколько одинаковых окон. Например, пользователь наблюдает одну и ту же таблицу, но отсортированную по-разному. События могут быть как локальными для окна, так и уровня всего приложения. Пользователь удаляет строку в таблице -> следует запрос на сервер -> с сервера приходит подтверждение -> все открытые окна, отображающие таблицу, обновляются (возможно, у всех пользователей). В приложении может быть общая шина (очередь) для такого рода событий. |
| Автор: mstalker26 24.8.2010, 17:17 | ||||||
| Спасибо тем, кто откликнулся. 2Skipy, Про фабрику событий я представлял себе так. Существует один класс, например, ListenerFactory (можно даже его сделать Singleton) и в нем методы такие как
тогда присоединять слушатели было бы удобно
как минус представляется мне то, что из самой ListenerFactory фиг разберешь куда и к чему эти listeners относятся. Объяснил я похоже криво, но х8m6 похоже тоже самое через FormController делает. С внутренними классами понятно, удобно. А с анонимными разве не возникает неразберихи? Добавлено через 10 минут и 4 секунды 2COVD, про диспечеризацию я имел в виду следующее, вешается один и тот же слушатель, например на кнопки button1 и button2. А потом смотрим
но как skipy заметил, если слушателей и источников наберется н-ное количество, можно будет застрелиться, чтобы не мучаться. P.S. На данный момент меня интересует техника написания слушателей для standalone приложений. Вроде как выходит внутренние классы и отдельный класс со слушателями подходят больше всего? |
| Автор: COVD 24.8.2010, 17:35 | ||
Я так делал, но у меня не было случая, когда в одном окне 50 кнопок. |
| Автор: jk1 24.8.2010, 21:43 | ||
Подход с фабрикой хорош тогда, когда события и обработчики надо регистрировать (например для операций типа Undo) или организовывать сложные разветвленные цепочки обмена событиями и сообщениями. Впрочем, последний случай больше располагает к применению JMS. |
| Автор: mstalker26 25.8.2010, 00:20 |
| Похоже на то, что самые активные отписались в этой теме. Всем спасибо за ответы. *ушел переваривать информацию* |
| Автор: Старовъръ 25.8.2010, 00:40 | ||||||
Добавлено через 6 минут и 7 секунд Вот http://javatalks.ru/sutra86469.php#86469 сообщение так же советовал бы прочитать. |