Как организовать приложение Swing GUI? - PullRequest
50 голосов
/ 07 июня 2011

Я написал несколько GUI с использованием Swing, и я знаю о MVC, но я так и не нашел хорошего способа как-нибудь организовать свой код.Я ищу что-то вроде структуры папок, которую maven вводит для каждого нового проекта.Другой пример - rails, где MVC вводится через структуру папок автоматически.Есть ли что-то похожее для Swing?

Было бы также приятно увидеть книгу, описывающую разработку более крупного приложения Swing.Все, что я нахожу, это книги о руководствах по дизайну, где дизайн относится к внешнему виду приложения.Другие книги по Swing (например, O'Reilly) подробно описывают все компоненты Swing, но где есть какая-либо информация о большой картине?

Есть ли хорошие примеры графического интерфейса Swing, где вы бы сказали:как вы организуете код / ​​папки / пакеты для свинга! "?

РЕДАКТИРОВАТЬ: я нашел следующий сайт http://www.ibm.com/developerworks/java/tutorials/j-springswing/section7.html, который описывает использование Spring при создании графического интерфейса.Это довольно старый пример, и он не отвечает на мой вопрос, но это шаг в правильном направлении.В нем также упоминается Spring RCP, но я не уверен, что это может быть решением.

РЕДАКТИРОВАТЬ2: Я все еще не нашел лучших ответов.Кто-нибудь знает пример идеально структурированного Swing GUI с открытым исходным кодом?Кто-нибудь знает книгу, которая описывает это?А если не для Swing, то, может быть, для GUI вообще?

Ответы [ 4 ]

12 голосов
/ 16 июня 2011

Хотя это Groovy , а не Java , я бы посоветовал вам взглянуть на Griffon , что является " Grails для Swing".

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

Я думаю, что этоможет дать вам хорошие идеи в целом, хотя вам придется немного поработать с Java.

Кроме того, обратите внимание, что Griffon также поддерживает сборку приложений в Java, и для этого он также может предоставить «архетипы»,так что вы тоже можете это проверить.

8 голосов
/ 07 июня 2011

Вы можете прочитать Обзор архитектуры Swing .Но когда я делаю большие приложения Swing, я не организую их так же, как при веб-разработке.Я просто организую свои приложения Swing в функциональные части.Например, если приложение имеет четыре вкладки с формами и таблицами, я помещаю компоненты из одной вкладки в один пакет.Затем я обычно получаю несколько пользовательских реализаций AbstractTableModel, с которыми взаимодействуют формы и таблицы.А Модель хранит кэш данных и связывается с базой данных.

В моем последнем приложении Swing я использовал Актеры Akka для упрощения потоков.Затем все компоненты Swing были выполнены в EDT-потоке, и они связались с объектом доступа к данным, который был пользовательским Actor.Тогда у меня также было несколько TimerTask, которые синхронизировали данные из базы данных со службами в Интернете, но они никогда не запускались на EDT, они только общались с DAO, (мой актер).

6 голосов
/ 07 июня 2011

Веб-разработка вынуждает вас к определенному источнику и расположению ресурсов. Это не относится к приложениям Swing. Здесь вы можете использовать макет, который наилучшим образом соответствует вашим целям.

Вы будете намного продуктивнее, если будете использовать какую-то IDE. NetBeans - это идеальный выбор для Swing. NB дает вам некоторые ограничения на то, как хранить ваши классы. Существует папка «Исходные пакеты», которая содержит Java-пакеты и «Тестовые пакеты» для соответствующих тестовых классов JUnit, если вы используете JUnit, что я настоятельно рекомендую вам сделать.

В случае, если вы используете Hibernate, вы должны придерживаться его соглашений, создать файл what.entity и what.util, а XML-файлы конфигурации должны быть в «пакете по умолчанию».

Любая дальнейшая организация этих пакетов зависит от программиста. Я делаю пакет с JFrame, который управляет всем шоу. И пакет для каждой логической единицы. Иногда я использую пакет для AbstractTableModels и держу их вместе, а другой - для ComboBoxModels. Не нужно делать более глубокие структуры. У вас может быть отдельный пакет для значков, которые вы можете использовать для своих кнопок, один для звуков и т. Д. Netbeans создает исполняемый файл JAR для вашего приложения, в который включены все необходимые файлы, включая необходимые библиотеки JAR.

Вот вам маленький пример. Все названия пакетов, кроме «th», довольно очевидны. «th» - это имя этого приложения, и у меня есть JFrame, в котором размещено приложение. Это приложение использует iReport для генерации отчетов. Для этого предназначен пакет iReports.

enter image description here

Книги описывают меньшие образцы и больше касаются соглашений Java.

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

0 голосов
/ 20 июня 2011

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

Я склоняюсь к тому, чтобы поместить панель V и соответствующую структуру M в один пакет. Вам также понадобится центральный дисплей управления для отображения каждой отдельной панели. C распределяется между центральным дисплеем управления и самими панелями.

Теперь, если вам нужно больше структуры в вашем проекте, вы можете highjack Struts 2 , чтобы переместить все C в некоторых действиях и иметь панели (V), указывающие, что должен быть следующий M / V для отображения. Struts изначально разрабатывался для веб-приложений, но Struts 2 теперь отключен от HttpServlet.

Я сам не пробовал, но вижу некоторые преимущества. Вы можете JUnit тестировать последовательности экранов без отображения экранов. Просто создайте панель экземпляров областей и вызовите методы прослушивания с событиями (щелчок мыши и т. Д.).

Просто идея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...