Java Class Architecture для программирования свинг GUI - PullRequest
2 голосов
/ 02 февраля 2010

Я пишу приложение, которое требует большого количества компонентов графического интерфейса.У меня много проблем с организацией занятий.Есть ли методология организации и аккуратно оформленная архитектура классов?

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

Кроме того, у меня есть множество анонимных и внутренних классов, и мой основной класс стал раздутым.Однако, когда я помещаю обработчики событий внутреннего класса в отдельные файлы, у меня возникают проблемы с доступом к компонентам моего основного класса.Существует ли методология внутренней организации больших приложений SwingGUI?

Ответы [ 6 ]

4 голосов
/ 02 февраля 2010

В больших проектах свинга я делаю партию приложения так:

  • Имеется один класс для каждого элемента графического интерфейса, такого как JPanel, JDialog и т. Д.

  • Используйте отдельный пакет для каждого экрана, особенно если вам необходимо реализовать настраиваемые модели таблиц или другие сложные структуры данных

  • Не используйте анонимные и внутренние классы, вместо этого реализуйте ActionListener и проверьте там ActionEvent.getActionCommand ().

3 голосов
/ 02 февраля 2010

Если большое количество компонентов графического интерфейса пользователя размещено на отдельных панелях, а затем панели расположены в вашем фрейме, вы можете систематизировать создание этих внутренних панелей, чтобы облегчить усвоение кода:

public MyApp() {
    JPanel mainPanel = new JPanel(new BorderLayout());
    JPanel north = createNorthPanel();
    mainPanel.add(north, BorderLayout.NORTH);

    JPanel south = createSouthPanel();
    mainPanel.add(south, BorderLayout.SOUTH);

    JPanel east = createEastPanel();
    mainPanel.add(east, BorderLayout.EAST);

    JPanel west = createWestPanel();
    mainPanel.add(west, BorderLayout.WEST);

    myFrame.setContentPane(mainPanel);
}
1 голос
/ 02 февраля 2010

Я бы разбил вещи на JPanels.

Возьмите группу компонентов, которые связаны друг с другом, и создайте новый класс (в отдельном файле), который наследуется от JPanel. Затем в своем главном классе вы просто импортируете этот класс и используете его, как и любой другой JPanel, за исключением того, что в нем уже есть все компоненты. Основному классу нужно будет только добавить панели к макету.

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

0 голосов
/ 22 июля 2013

Я вижу отдельные методы / классы для GUI.,,Я просто не уверен, что целые отдельные пакеты будут стоить хлопот, если не будет огромное количество форм и т. Д.

0 голосов
/ 02 февраля 2010

Вот стратегии, которые я использовал в прошлом, чтобы уменьшить беспорядок в классах свинга.

  1. Универсальный слушатель: вместо того, чтобы создавать анонимные классы ActionListener вокруг, создайте один ActionListener, который принимает объект и имя метода в качестве параметра конструктора. При запуске ActionListener вызывает указанный метод для указанного объекта. Добавляет сложность в виде отражения, но прожигает сотни строк шаблонного кода ошибки.

  2. Разделение проблем. Отдельные [Methods | Classes | Packages] для следующих задач:

    • создание компонентов: вам нужно новое текстовое поле? Не вызывайте напрямую новый JTextField, пусть фабрика создаст его для вас. Внутри метода создания вы делаете все настройки, такие как предпочтительный размер, цвета, шрифты. Структурирует код, удаляет дубликаты и обеспечивает одинаковое поведение во всем приложении. Платит особенно за сложные элементы управления, такие как сборщики дат

    • сборка простых элементов управления для единиц, которые принадлежат друг другу: lable + edit control + marker для неверного ввода; Наборы кнопок

    • расположение группы таких единиц на один JPanel

    • Объединение JDialog, JWindow, JFrame или чего-либо еще и JPanel

    • проводка событий

  3. Рассмотрим JGoodies Binding

0 голосов
/ 02 февраля 2010

Swing внутренне организован с использованием шаблона MVC.

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