Как организовать приложение Swing GUI?
Я написал несколько графических интерфейсов с помощью Swing, и я знаю о MVC, но я никогда не нашел хороший способ действительно организовать свой код. То, что я ищу, похоже на структуру папок, которую maven вводит для каждого нового проекта. Другим примером является рельсы, где MVC автоматически вводится через структуру папок. Есть что-то подобное для Swing?
Было бы неплохо увидеть книгу, в которой описывается разработка более крупного приложения Swing. Все, что я нахожу, это книги о принципах проектирования, в которых дизайн относится к внешнему виду приложения. Другие книги Swing (например, O'Reilly) подробно описывают все компоненты качания, но где есть информация о большой картине?
Есть ли хорошие примеры swing gui, где вы бы сказали: "Как вы организуете код/папки/пакеты для swing!"?
EDIT: я нашел следующий сайт http://www.ibm.com/developerworks/java/tutorials/j-springswing/section7.html, в котором описывается использование spring при создании графического интерфейса. Это довольно старый пример, и он не отвечает на мой вопрос, но это шаг в правильном направлении. Он также упоминает spring RCP, но я не уверен, может ли это быть решением.
EDIT2: Я до сих пор не нашел лучшего ответа. Кто-нибудь знает пример идеально структурированного графического интерфейса Swing, который является Open Source? Кто-нибудь знает книгу, которая описывает это? А если не для Swing, то, может быть, для GUI вообще?
Ответы
Ответ 1
Хотя это Groovy, а не Java, я бы посоветовал вам взглянуть на Griffon, который является "Grails for Swing".
Он применяет определенную структуру (в терминах каталогов и шаблонов, в частности, MVC) для всех приложений, которые вы создаете с ней.
Я думаю, что это может дать вам хорошие идеи в целом, хотя вам придется немного адаптироваться к Java.
Кроме того, обратите внимание, что Griffon также поддерживает создание приложений на Java, и он может также предоставить для этого "архетипы", поэтому вы также можете это проверить.
Ответ 2
Вы можете прочитать Обзор архитектуры Swing. Но когда я делаю большие приложения Swing, я не организовываю их так же, как и при создании веб-разработки. Я просто организовываю свои приложения Swing в функциональных частях. Например. если приложение имеет четыре вкладки с формами и таблицами, я помещаю компоненты с одной вкладки в один пакет. Затем я обычно заканчиваю несколькими пользовательскими реализациями AbstractTableModel
, с которыми взаимодействуют формы и таблицы. И модель хранит кеш данных и взаимодействует с базой данных.
В моем последнем приложении Swing я использовал акковые актеры, чтобы упростить потоковую обработку. Затем у меня были все компоненты Swing, выполненные в EDT-потоке, и они общались с объектом доступа к данным, который был обычным актером. Затем у меня также было несколько TimerTask
, которые синхронизировали данные из базы данных с услугами в Интернете, но они никогда не запускались на EDT, они только общались с DAO (мой актер).
Ответ 3
Веб-разработка заставляет вас использовать определенные макеты источников и ресурсов. Это не относится к приложениям Swing. Здесь вы можете использовать макет, который наилучшим образом соответствует вашим целям.
Вы будете намного более продуктивными, если используете некоторую среду IDE. NetBeans - идеальный выбор для Swing. NB дает вам некоторые ограничения на способ хранения ваших классов. Существует папка "Исходные пакеты", которая содержит пакеты Java и "тестовые пакеты" для соответствующих тестовых классов JUnit, если вы используете JUnit, о котором я настоятельно советую вам сделать.
Если вы используете Hibernate, вы должны придерживаться его соглашений, создавать any.entity и what.util, а файлы конфигурации XML должны быть в пакете по умолчанию.
Любая дальнейшая организация этих пакетов зависит от программиста. Я делаю пакет с JFrame, который запускает все шоу. И пакет для каждой логической единицы. Иногда я использую пакет для AbstractTableModels и сохраняю их вместе, а другой для ComboBoxModels. Нет необходимости делать более глубокие структуры. У вас может быть отдельный пакет для значков, которые вы можете использовать для своих кнопок, один для звуков и т.д. Netbeans создает файл runnable jar для вашего приложения, в который включены все необходимые файлы, включая необходимые библиотеки.
Здесь у вас есть небольшой пример. Все имена пакетов, кроме "th", совершенно очевидны. 'th' - это имя этого приложения, и у меня есть JFrame, в котором размещено приложение. Это приложение использует iReport для создания отчетов. Это пакет iReports для.
![enter image description here]()
Книги описывают меньшие образцы и больше связаны с соглашениями Java.
Вы можете попробовать Apache Maven и посмотреть архитектуру, которую они предоставляют с помощью архетипов приложения.
Ответ 4
К сожалению (или, к счастью, зависит от того, как вы на это смотрите), нелегко разработать общие панели, используемые для нескольких структур данных. M часто тесно связан с V, а V часто содержит некоторые C.
Я стараюсь поместить область V и соответствующую структуру M в один и тот же пакет. Для отображения каждого отдельного окна вам также нужен центральный контрольный дисплей. C делится между центральным управляющим дисплеем и самими панелями.
Теперь, если вам нужно больше структуры в вашем проекте, вы можете выполнить фреймворк Struts 2 для перемещения всех C в некоторых действиях и (V) указывают, какой должен быть следующий M/V для отображения. Struts изначально разработан для веб-приложений, но Struts 2 теперь отключен от HttpServlet.
Я не пробовал это сам, но вижу некоторые преимущества. Вы можете использовать тестовые экраны JUnit без экранов дисплея. Просто создайте панель экземпляров панелей и вызовите методы прослушивания с событиями (щелчок мышью и т.д.).
Просто идея.