В моем приложении много представлений (подкомпонентов) и только один контроллер. Выбор некоторых параметров в одном представлении может изменить макет и количество компонентов в другом представлении.
Контроллер инициализирует представление, которое, в свою очередь, создает все подкомпоненты.
В таком приложении контроллер должен иметь ссылку на все подкомпоненты?
Как в слушателе в одном представлении вызывает контроллер для выполнения действия, а затем необходимо обновить другое представление.
Я чувствую, что у контроллера не должно быть ссылки на все виды, но я не знаю, куда идти здесь.
Пример из книги «Первые шаблоны проектирования в Head» имеет только один вид, поэтому я застрял.
++++++++++++++++++++++++
Подробнее.
Игра, которую я пишу, - это игра в шашки (шашки). В одном сценарии, когда компьютер играет против самого себя, пользователь должен выбрать некоторые параметры перед началом игры. Одним из таких вариантов является выбор стратегии игры на определенные периоды в течение игры. Например, если на доске будет от 12 до 8 фигур, она будет атаковать больше, на доске от 8 до 4 фигур будет более оборонительной.
На данный момент игровой интерфейс структурирован так, что существует один общий JPanel (RightContainerFrame), который содержит другие JPanel; затем существует один JPanel (StartGamePanel), в котором пользователь может настроить игру. Существует также JTabbedPane (jTabbedPane1), который содержит вкладки. В настоящее время в StartGamePanel, когда пользователь выбирает определенную опцию в JComboBox, необходимо добавлять или удалять вкладки из jTabbedPane1.
В настоящее время я достигаю этого в StartGamePanel
RightContainerFrame.getInstance().generateAndDisplayPlayerTwoRangeTabs(numberOfRangeTabsNeeded);
Теперь я знаю, что все это неправильно, поскольку у меня есть одно представление, StartGamePanel напрямую изменяет другое представление JTabbedPane, вызывая метод в другом представлении контейнера RightContainerFrame.
Я открыт для любых предложений относительно того, как структурировать эту проблему.
Сначала я мог переместить метод jComboBox1ActionPerformed
на контроллер. Это может либо обновить модель для jTabbedPane1. Или он может вызвать метод непосредственно в jTabbedPane1 для отображения необходимого количества вкладок.