Java Swing: как правильно создать экземпляр GUI и передать доменные объекты? - PullRequest
6 голосов
/ 23 октября 2011

У меня есть графический интерфейс с вложенными панелями (вкладка с вложенными панелями и т. Д.).Мне нужно передать объект домена глубоко вложенной панели.Я могу думать о двух способах:

  • Создание всех объектов графического интерфейса в одном месте, например, в классе фрейма.Это сделало бы передачу объектов домена мертвым простым, но класс Frame будет огромным и вряд ли пригодным для обслуживания.

  • Каждая панель имеет свой собственный класс, в котором мы создаем и размещаем ее компоненты
    .Теперь его легко поддерживать, и классы чистые, но как
    передать по цепочке мои доменные объекты?Я не хочу проходить через них через конструкторы панелей, которые даже не должны знать об их
    существовании.И панели верхнего уровня будут иметь тонну этих объектов, чтобы начать с них.

Ни один из способов не выглядит как подделкаКак вы обычно к этому подходите?

Ответы [ 2 ]

2 голосов
/ 25 октября 2011

Когда я собираю Java Swing GUI, у меня есть модель данных для каждого основного элемента GUI.Обратите внимание, что это не шаблон MVC.Это больше похоже на локальный шаблон MV.Если хотите, вы можете рассматривать слушатели GUI-элемента как «контроллер».

Каждая панель имеет свой собственный класс, в котором мы создаем экземпляры и размечаем ее компоненты.Теперь его легко поддерживать, а классы чистые, но как передать цепочку моих доменных объектов?

У вас правильная идея, хотя вам не нужно много проходить.

My JFrame (или JApplet) будет иметь связанный класс модели с полями глобального типа.Экземпляр этого модельного класса обычно передается дочерним элементам.Это позволяет дочерним элементам правильно реагировать при выборе опции меню (в качестве примера)

My JPanel(s) будет иметь связанный класс модели, который поддерживает состояние текстовых или кнопочных дочерних элементов.

Более сложные дочерние элементы, такие как JList или JTree, уже имеют связанную модель данных.Я, вероятно, для удобства оберну эти связанные модели данных в класс модели JPanel.

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

0 голосов
/ 25 октября 2011

Это своего рода образец цепочки ответственности. Я хотел бы создать что-то, что создает карту со всеми вашими экранными объектами и передает ее из конструктора в конструктор. Таким образом, каждый экземпляр может взять с карты все, что ему нужно, не заботясь о том, что там еще есть.

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