Как организовать приложение Swing GUI? - программирование
Подтвердить что ты не робот

Как организовать приложение 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 вообще?

4b9b3361

Ответ 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 без экранов дисплея. Просто создайте панель экземпляров панелей и вызовите методы прослушивания с событиями (щелчок мышью и т.д.).

Просто идея.